Chƣơng 2 CÁC THUẬT TOÁN PHÂN CỤM TUẦN TỰ
2.6. Giai đoạn tinh chế
Trong các thuật toán đã đưa ra, có thể xảy ra trường hợp có hai cụm được định vị rất gần nhau, và có thể hoà nhập hai cụm này thành một cụm. Các trường hợp như thế này không thể thực hiện bằng các thuật toán đó. Một cách để giải quyết vấn đề này là chạy thủ tục trộn đơn giản sau đây sau khi kết thúc các sơ đồ phân cụm. Gọi M là tham số người sử dụng định nghĩa để xác định độ gần gũi d(Ci, Cj) của hai cụm Ci và Cj. x1 x5 x8 x7 x2 x3 x6 x4 (a) x1 x5 x8 x7 x4 x2 x3 x6 (b) Thủ tục trộn
1. (A) Tìm Ci, Cj (i < j) sao cho d(Ci, Cj) = mink, r=1…m, k r d(Ck, Cr) 2. if d(Ci, Cj) M then
a. Trộn Ci, Cj vào Ci và khử Cj
b. Cập nhật các đại diện của cụm Ci (nếu phân cụm theo điểm đại diện) c. Đổi tên các cụm Cj+1,…,Cm thành Cj ,…,Cm-1 d. m = m -1 e. Go to (A) 3. Else a. Stop 4. End {if}
Hạn chế khác của các thuật toán tuần tự là nó phụ thuộc vào thứ tự của các vector đưa vào xử lý. Ví dụ, trong thuật toán BSAS, đầu tiên x2 được đưa vào cụm
C1, và sau khi kết thúc thuật toán bốn cụm được hình thành. Khi đó, có thể x2 sẽ gần với một cụm nào đó khác cụm C1. Tuy nhiên, không có cách nào để chuyển x2 tới cụm gần nó nhất. Cách đơn giản để tránh điều này là sử dụng thủ tục sắp xếp lại như sau:
Trong thủ tục này, b(i) lưu chỉ số của cụm Cj gần với xi nhất. Thủ tục này có thể sử dụng sau khi kết thúc các thuật toán hoặc nếu thủ tục trộn cũng được sử dụng thì nó được thực hiện sau khi thuật toán trộn kết thúc.
Một biến thể của thuật toán BSAS ứng dụng cho phân cụm theo điểm đại diện là kết hợp hai thủ tục tinh chế đã được đề xuất trong [12]. Theo thuật toán này, thay vì bắt đầu với một cụm, ta bắt đầu với m > 1 cụm, mỗi cụm chứa một trong m vector đầu tiên của X. Áp dụng thủ tục trộn và sau đó đưa mỗi vector còn lại vào thuật toán. Sau khi đưa vector hiện tại vào một cụm và cập nhật lại các đại diện của nó, ta lại thực hiện thủ tục trộn. Nếu khoảng cách giữa vector xi và cụm gần nó nhất lớn hơn một ngưỡng định trước thì hình thành một cụm mới chỉ chứa xi. Sau khi tất cả các vector đã được đưa vào thuật toán, chạy thủ tục sắp xếp lại một lần nữa. Thủ tục trộn được áp dụng N – m + 1 lần.
Thủ tục sắp xếp lại 1. For i = 1 to N do
Tìm Cj sao cho d(xi, Cj) = mink=1..m d(xi, Ck) // Tìm xem xi gần với cụm nào nhất
Đặt b(i) = j
End {For}
2. For j = 1 to m do
Đặt Cj = {xi X : b(i) = j} //b(i) lưu chỉ số của cụm Cj gần với xi nhất Cập nhật lại các đại diện (nếu sử dụng).