Các thuật toán phân cụm dựa trên mật độ

Một phần của tài liệu Nghiên cứu một số phương pháp phân cụm mờ và ứng dụng (Trang 30 - 33)

Thuật toán DBSCAN

Thuật toán DBSCAN thích nghi với mật độ dầy để phân cụm và khám phá ra các cụm có hình dạng bất kỳ trong không gian CSDL có nhiễu.

Trên thực tế DBSCAN tìm kiếm cho các cụm bằng cách kiểm tra các đối tƣợng mà có số đối tƣợng láng giềng nhỏ hơn một ngƣỡng tối thiểu, tức là có tối thiểu MinPts đối tƣợng và mỗi đối tƣợng trong cụm tồn tại một đối tƣợng khác trong cụm giống nhau với khoảng cách nhỏ một ngƣỡng Eps. Tìm tất cả các đối tƣợng mà các láng giềng của nó thuộc về lớp các đối tƣợng đã xác định ở trên, một cụm đƣợc xác định bằng một tập tất cả các đối tƣợng liên thông mật độ các láng giềng của nó. DBSCAN lặp lại tìm kiếm ngay khi các đối tƣợng liên lạc mật độ từ các đối tƣợng trung tâm, nó có thể bao gồm việc kết hợp một số cụm có mật độ liên lạc. Quá trình kết thúc khi không tìm đƣợc điểm mới nào có thể thêm vào bất cứ cụm nào.

DBSCAN có thể tìm ra các cụm với hình thù bất kỳ, trong khi đó tại cùng một thời điểm ít bị ảnh hƣởng bởi thứ tự của các đối tƣợng dữ liệu nhập vào. Khi có một đối tƣợng đƣợc chèn vào chỉ tác động đến một láng giềng xác định. Mặt khác, DBSCAN sử dụng tham số EpsMinPts trong thuật toán để kiểm soát mật độ của các cụm. DBSCAN bắt đầu với một điểm tuỳ ý và xây dựng mật độ láng giềng có thể đƣợc đối với EpsMinPts. Vì vậy, DBSCAN yêu cầu ngƣời dùng xác định bán kính Eps của các láng giềng và số các láng giềng tối thiểu MinPts, các tham số này khó mà xác định đƣợc tối ƣu, thông thƣờng nó đƣợc xác định bằng phép chọn ngẫu nhiên hoặc theo kinh nghiệm.

Độ phức tạp của DBSCAN là O(n2), nhƣng nếu áp dụng chỉ số không gian để giúp xác định các láng giềng của một đối tƣợng dữ liệu thì độ phức của DBSCAN đã đƣợc cải tiến là O(nlogn). Thuật toán DBSCAN có thể áp dụng cho các tập dữ liệu không gian lớn đa chiều, khoảng cách Euclide đƣợc sử dụng để đo sự tƣơng tự giữa các đối tƣợng nhƣng không hiệu quả đối với dữ liệu đa chiều.

Hình 2.9: Hình dạng các cụm đƣợc khám phá bởi thuật toán DBSCAN

Thuật toán: DBSCAN khởi tạo điểm p tùy ý và lấy tất cả các điểm

liên lạc mật độ từ p tới EpsMinPts. Nếu p là điểm nhân thì thủ tục trên tạo ra một cụm theo EpsMinPts, nếu p là một điểm biên, không có điểm nào liên lạc mật độ từ p và DBSCAN sẽ đi thăm điểm tiếp theo của tập dữ liệu.

Nếu sử dụng giá trị toàn cục EpsMinpts, DBSCAN có thể hoà nhập hai cụm thành một cụm nếu mật độ của hai cụm gần bằng nhau. Giả sử khoảng cách giữa hai tập dữ liệu S1 và S2 đƣợc định nghĩa là:

dist(S1, S2) = min{dist(p, q) {p  S1 và q  S2}. Thuật toán DBSCAN đƣợc mô tả chi tiết nhƣ sau:

... Modul chƣơng trình chính ... DBSCAN(SetOfPoints, Eps, MinOts)

//SetOfPoints is UNCLASSIFIED Clusterid:= NextId(NOISE);

Point := SetOfPoints.get(i);

IF PointClId = UNCLASSIFIED THEN

IF ExpandCluster(SetOfPoints, Point, ClusterId, Eps, MinPts) THEN ClusterId.= nextId(ClusterId) END IF END IF END FOR END; //DBSCAN ---Thủ tục ExpandCluster---

ExpandClusster(SetOfPoints, Points, C1Id, Eps, MinPts): Boolean;

seeds:= SetOfPoints.regionQuery(Point, Eps) IF seeds.size < MinPts THEN //no core point

SetOfPoints.changeclId(Point, NOISE), RETURN False;

ELSE //all points in seeds are density-reachable from Point SetOfPoints.changeClId(seeds, C1Id);

seeds.delete(Point);

WHILE seeds <> Empty DO currentP:= seeds.first();

result:= SetOfPoints.regionQuery(CurrentP, Eps); IF result.size >= MinPts THEN

FOR i FROM 1 to result.size DO resultpP:= result.get(i);

IF resultp.C1Id IN {UNCLASSIFIED, NOISE} THEN IF resultp.ClId = UNCLASSIFIED THEN

seeds.append(resultP); END IF;

SetOfPoints.changeC1Id(resultP, C1Id), END IF; //UNCLASSIFIED or NOISE

END FOR;

END IF; //result.size >= Minpts seeds.delete(currentP);

END WHILE; //seeds <> Empty RETURN True;

END IF;

END; //ExpandCluster (adsbygoogle = window.adsbygoogle || []).push({});

Trong đó SetOfPoints hoặc là tập dữ liệu ban đầu hoặc là cụm đƣợc khám phá từ bƣớc trƣớc, C1Id (ClusterId) là nhãn đánh dấu phần tử dữ liệu nhiễu có thể thay đổi nếu chúng có thể liên lạc mật độ từ một điểm khác trong CSDL, điều này chỉ xảy ra đối với các điểm biên của dữ liệu. Hàm

SetOfPoints.get(i) trả về phần tử thứ i của SetOfPoints. Thủ tục

SetOfPoints.regionQuery(Point, Eps) trả về một danh sách các điểm dữ liệu lân cận với điểm Point trong ngƣỡng Eps từ tập dữ liệu SetOfPoints. Trừ một số trƣờng hợp ngoại lệ, kết quả của DBSCAN là độc lập với thứ tự duyệt các đối tƣợng dữ liệu. EpsMinPts là hai tham số toàn cục đƣợc xác định bằng thủ công hoặc theo kinh nghiệm. Tham số Eps đƣợc đƣa vào là nhỏ so với kích thƣớc của không gian dữ liệu, thì độ phức tạp tính toán trung bình của mỗi truy vấn là O(logn).

Ngoài thuật toán DBSCAN ra, phân cụm dựa trên mật độ còn bao gồm 2 thuật toán khác nhƣ: Thuật toán OPTICS; Thuật toán DENCLUE.

Một phần của tài liệu Nghiên cứu một số phương pháp phân cụm mờ và ứng dụng (Trang 30 - 33)