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ố Eps và MinPts 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 Eps và MinPts. 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 Eps và MinPts. Nếu p là điểm nhân thì thủ tục trên tạo ra một cụm theo Eps và MinPts, 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 Eps và Minpts, 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);
FOR i FROM 1 TO SetOfPoints.size DO Point:= SetOfPoints.get(i);
IF PointClId = UNCLASSIFIED THEN
IF ExpandCluster(SetOfPoints, Point, ClusterId, Eps, MinPts) THEN
ClusterId.= nextId(ClusterId) 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; //ExpandCluster
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. Eps và MinPts 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.