Thuật toán DBSCAN

Một phần của tài liệu Nghiên cứu phát triển thuật toán phân cụm các trình tự sinh học dựa trên mức độ tương đồng luận văn thạc sĩ (Trang 54 - 56)

Thuật toán DBSCAN được thiết kế để phát hiện các nhóm và noise trong tập dữ liệu không gian thông qua hai định nghĩa 5 và 6.

Để tìm một nhóm, DBSCAN bắt đầu với điểm p và truy tìm tất cả các điểm density-reachable từ p. Nếu p là một điểm lõi, thì dùng bổ đề 2 để mở rộng nhóm. Nếu p là một điểm biên, không có điểm nào đạt đến từ p, thì DBSCAN sẽ viếng thăm điểm kế tiếp.

Khi sử dụng hai tham số toàn cục Eps và MinPts, DBSCAN có thể ghép hai nhóm thành một nhóm thông qua định nghĩa 5. Gọi khoảng cách của hai tập điểm S1 và S2 là dist(S1, S2) = min{dist(p,q)| pS1,qS2}. Hai tập điểm riêng biệt nhau khi và chỉ khi khoảng cách giữa hai tập điểm lớn hơn Eps. Sau đây là thuật toán DBSCAN:

DBSCAN (SetOfPoints, Eps, MinPts) ClusterID:= nextID(NOISE);

FOR i:=1 TO SetOfPoints.size() DO Point: = SetOfPoint.get(i);

IF Point.ClId = UNCLASSIFIED THEN

IF ExpanCluster(SetOfPoints, Point, ClusterID, Eps, MinPts) THEN ClusterID:= nextID(ClusterID);

END IF END IF END;

ExpandCluster(SetOfPoints, Point, ClID, Eps, MinPts): Boolean; Seeds:= SetOfPoint.regionQuery(Point, Eps);

IF seeds.size() < MinPts THEN

SetOfPoint.changeClId(Point, NOISE); RETURN False;

ELSE

SetOfPoints.changeClId(seeds, ClId); Seeds.delete(Point);

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

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

FOR i:=1 TO result.size DO resultP:=result.get(i);

IF resultP.ClId IN {UNCLASSIFIED, NOISE} THEN IF resultP.ClId = UNCLASSIFIED THEN

Seeds.append(resultP); END IF

SetOfPoints.changeClId(resultP, ClId); END IF END FOR END IF Seeds.delete(currentP); END WHILE RETURN True; END IF END;

Một số ký hiệu dùng trong thuật toán: - Eps, MinPts là hai tham số toàn cục - SetOfPoints: tập dữ liệu điểm.

o SetOfPoints.get(i): trả về phần tử điểm thứ i trong tập điểm.

o SetOfPoints.regionQuery(Point, Eps): trả về số phần tử trong bán kính lân cận.

o SetOfPoints.ChangeClId(Point, ClID): Xác định nhóm cho Point Độ phức tạp của thuật toán được tính: Thời gian trung bình thực thi hàm SetOfPoints.regionQuery(Point, Eps)là O(log n) [9] . Đối với mỗi điểm trong tập dữ liệu thuật toán sẽ thực hiện một lần hàm này. Vì vậy, thời gian thực thi trung bình là O(n*logn).

Cấu trúc của thuật toán khá đơn giản và tường minh. Nhưng giá trị xấp xỉ của hai tham số toàn cục là Eps và MinPts trong mỗi nhóm là rất khó. Tuy nhiên, có một phương pháp đơn giản và hiệu quả là để xác định giá trị hai tham số này.

Một phần của tài liệu Nghiên cứu phát triển thuật toán phân cụm các trình tự sinh học dựa trên mức độ tương đồng luận văn thạc sĩ (Trang 54 - 56)