DATA MINING Chameleon 2: Thuật toán phân cụm dựa trên đồ thị được cải tiến. B2B DATA MINING Chameleon 2 Thuật toán phân cụm dựa trên đồ thị được cải tiến Thuật toán phân cụm dựa trên đồ thị được cải tiến Giới thiệu Thuật toán Chameleon nguyên bản Giới thiệu thuật toán Chamele.
Trang 1DATA MINING
Chameleon 2: Thuật toán phân cụm dựa trên đồ thị được cải tiến
Trang 21. Giới thiệu
2. Thuật toán Chameleon nguyên bản
3. Giới thiệu thuật toán Chameleon 2
4. Chameleon 2 autopilot
5. Thử nghiệm
Mục lục
Trang 31 Giới thiệu
• Phân cụm là một kỹ thuật nhóm các đối tượng tương đồng thành các cụm và các đối tượng khác nhau thành các cụm khác nhau
• Không có định nghĩa chung chính xác một cụm là gì Các thuật toán khác nhau sử dụng các định nghĩa khác nhau của một cụm
• Phân cụm là một vấn đề (thuật toán) không giám sát Tức là gán dữ liệu cho một số nhóm không xác định trước dựa trên sự tương đồng của chúng
• Các thuật toán phân cụm được thiết kế để nhóm các đối tượng theo cách tương tự như cách quan sát của con người
• Tuy nhiên, mục tiêu cuối cùng là phát hiện các cấu trúc có kích thước cao hơn khả năng mà con người có thể nhận ra
Trang 41 Giới thiệu
• Nhiều thuật toán không tạo ra kết quả phân cụm hơn con người
• Một số gán các nhãn chính xác cho một cụm, trong khi nhiều thuật toán khác chấp nhận gán mờ cho nhiều cụm khác
• Nhược điểm chính của các phương pháp phân cụm dựa trên nguyên mẫu là gán các điểm dữ liệu cho centroid gần nhất, các phương pháp như vậy không thể phát hiện ra các cụm không phải hình cầu
Trang 51 Giới thiệu
• Là một thuật toán phân cụm dựa trên đồ thị, cố gắng khắc phục những hạn chế của phương pháp phân cụm truyền thống
• Hoạt động bằng cách kết nối các điểm dữ liệu gần nhau cũng như có tính đến thuộc tính các cụm bên trong khi hợp nhất chúng với nhau
• Không giống các thuật toán khác, Chameleon tạo ra kết quả giống con người nhất có thể
Trang 61 Giới thiệu
• Thuật toán Chameleon nguyên bản thường xác định được các cụm chính, nhưng lại sản sinh ra thêm các cụm nhiễu và hơn nữa rất khó để cấu hình
• Phiên bản cải tiến thuật toán Chameleon 2 có khả năng tìm thấy các cấu trúc phức tạp trong các bộ dữ liệu khác nhau với tỷ lệ lỗi tối thiểu và không cần điều chỉnh tham số quá nhiều
• Theo đánh giá, thuật toán Chameleon mới vượt trội hơn so với thuật toán nguyên bản trên tất cả các bộ dữ liệu thử nghiệm và hầu như luôn cung cấp kết quả tốt hơn so với các thuật toán thường dùng khác
Trang 72 Thuật toán Chameleon nguyên bản
• Hoạt động trên biểu đồ biểu diễn dữ liệu
• Thuật toán Chameleon gồm 3 bước:
• Bước 1: Xây dựng đồ thị kNN cho tập điểm dữ liệu (nếu đồ thị đã có, bỏ qua bước này)
• Bước 2: Phân rã đồ thị được tạo ra thành các phân vùng nhỏ có kích thước bằng nhau và giảm thiểu số lượng cạnh bị cắt (với cạnh bị cắt là cạnh có trọng số nhỏ, bằng với đảo ngược khoảng cách của 2 điểm) Sau khi phân vùng, nhiều cụm nhỏ có kết nối cao được hình thành (Để phân vùng có thể sử dụng thuật toán phân vùng siêu đồ thị Hmetis của Karypis
Trang 82.1 Công thức tính toán trong Chameleon
• Tính tổng trọng số của các cạnh kết nối 2 cụm con:
, (1), (2)
Trang 92.1 Công thức tính toán trong Chameleon
• Công thức tính gần gũi tương đối (relative closeness):
Trang 102.1 Công thức tính toán trong Chameleon
• Trong công thức (4), càng lớn thì 2 cụm và càng nên hợp nhất với nhau do là sự so sánh giữa tổng trọng số các cạnh nối trong cụm với tổng trọng số sau khi tách cụm Do đó, Chameleon hợp nhất các cụm có mật độ tương tự nhau
• Cuối cùng sự tương đồng giữa 2 cụm và được tính bằng công thức:
Trang 113 Thuật toán Chameleon 2
• Hạn chế của thuật toán Chameleon
• Không có khả năng xử lý các cụm nhỏ (chỉ chứa một hoặc vài phần tử)
• Không xử lý được các phần tử nhiễu
• Cấu hình thuật toán khá phức tạp
• Bên cạnh các tham số k, α, β, một số tham số trong hMETIS cũng cần được điều chỉnh cho bộ dữ liệu cụ thể
Trang 123.1 Khởi tạo đồ thị
• Chameleon 1(Chameleon gốc) được xây dựng dựa trên đồ thị kNN bất đối xứng
Biểu diễn đồ thị kNN bất đối xứng trên tập dữ liệu DS-577, mỗi phần tử được kết nối với k=18 nút lân cận
Trang 133.1 Khởi tạo đồ thị
• Chameleon 2 được xây dựng dựa trên đồ thị kNN đối xứng
Biểu diễn đồ thị kNN đối xứng trên tập dữ liệu DS-577, mỗi cạnh được thêm vào chỉ khi 2 điểm của cạnh đó liệt kê các nút khác trong 18
nút lân cận
Trang 143.1 Khởi tạo đồ thị
• Đồ thị kNN đối xứng của thuật toán Chameleon 2 loại bỏ nhiều cạnh kết nối giữa các cụm dẫn đến kết quả phân cụm tốt hơn
• Để có được sự phân cụm hợp lý, một giá trị k thích hợp cần phải được khởi tạo
• Thuật toán hoạt động tốt nhất nếu một biểu đồ kết nối được cung cấp
• Brito và cộng sự đã chứng minh rằng với n đủ lớn và hằng số c thiết lập k=c.ln(n) thì đồ thị kết nối được đảm bảo Trong bài này c=2 và n là kích thước dữ liệu đầu vào
Trang 153.2 Phân rã đồ thị
• Chameleon 1 sử dụng thuật toán phân rã siêu đồ thị nhanh (hMETIS), tuy nhiên thuật toán này không xác định và không có sẵn mã nguồn
• Chameleon 2 thực hiện phương pháp phân rã thay thế dựa trên sự tách rời Fiduccia-Mattheyses đệ quy
• Quy trình tách rời đệ quy:
• Yêu cầu một tham số , xác định số đối tượng tối đa trong một phân vùng
• Tách rời Fiduccia-Mattheyses liên tục cho đến khi số đối tượng trong một cụm không quá giá trị
•
Trang 163.3 Tinh chỉnh phân vùng
• Sau khi phân rã (sử dụng hMETIS hoặc dùng phân rã tách đệ quy) đôi khi có thể tạo ra
các cụm bao gồm các phần tử cách xa nhau và không được kết nối bởi bất kỳ cạnh nào
Các cụm như vậy không thể được cố định trong giai đoạn hợp nhất và làm xấu đi
nghiêm trọng kết quả cuối cùng
• Để khắc phục tình trạng này, chúng ta áp dụng phương pháp Flood fill mà đệ quy để tìm
thấy các thành phần được kết nối trong biểu đồ phân rã Nếu một cụm bị ngắt kết nối,
Flood fill sẽ chia nó thành các cụm riêng biệt và được kết nối
• Thuật toán 1: Flood fill và ví dụ về kết quả tinh chỉnh ở trang sau
Một ví dụ về phân rã cân bằng với số lượng cạnh cắt nhỏ nhất Kết quả đã phân ra làm 2 cụm có số lượng nút gần bằng nhau Tuy nhiên, phần còn lại
là một cụm (có 1 nút) bị ngắt kết nối.
Trang 173.3 Tinh chỉnh phân vùng
Thuật toán 1: Flood fill
Input: Biểu đồ kNN được phân rã.
Output: Các cụm được kết nối.
Tìm và đánh dấu các đồ thị con được kết nối
Funtion FloodFill(graph)
while not marked all nodes in graph do
foreach node in graph do
if not marked(node) then
cluster = NewCluster() MarkConnectedSubgraph(graph, node, cluster) Thêm đệ quy tất cả các nút được kết nối vào cùng một cụm
Funtion MarkConnectedSubgraph(graph, node, cluster)
Mark(node, cluster)
foreach neighbor in neighbor(node) do
if not marked(neighbor) then
MarkConnectedSubgraph(graph, node, cluster)
Trang 183.4 Hợp nhất
• Không giống các thuật toán phân cụm phân cấp truyền thống, Chameleon 2 lưu trữ những cụm lân cận gần nhất, vì nó sẽ hợp nhất các cụm đó
• Thay vì tính toán độ phức tạp O() khoảng cách giữa tất cả các cặp cụm có thể có, chỉ có các cụm với hằng số c lân cận gần nhất là có thể hợp nhất Trong lần lặp đầu tiên, chỉ có O(n.c) được đánh giá
•
Trang 193.5 Biện pháp cải thiện độ tương tự
• Chameleon 1 chọn cặp cụm tương tự nhất và hợp nhất các cụm ghép nối đó với nhau; bước này lặp lại đến khi không còn cụm nào
• Sự lựa chọn cặp cụm giống nhau dựa trên một chức năng được gọi là thước đo độ tương tự
• Thay vì tính toán dựa vào sự tách rời như ở Chameleon 1, Chameleon 2 dựa trên sự tương đồng về tỉ lệ giữa trọng số trung bình của tất cả các cạnh trên 2 cụm và tổng trọng số bên trong các cụm đó:
, (6), (7)
•
Trang 203.5 Biện pháp cải thiện độ tương tự
• được tính theo cách tương tự bằng cách sử dụng trung bình của trọng số cạnh liên cụm giữa cụm và Do đó cách tính độ tương tự gần giống công thức (3)
, (8)
• Kết nối liên kết (inter-connectivity) được sửa đổi chỉ xem xét tỷ lệ giữa số cạnh, thay vì dựa vào trọng số cạnh
, (9)
•
Trang 213.5 Biện pháp cải thiện độ tương tự
• Tham số β để sửa đổi trọng số của hệ số ρ:
Trang 22lần quét đồ thị, do đó có độ phức tạp là O(n).
• Cuối cùng, một quá trình hợp nhất bình thường sẽ có độ phức tạp là O() Bằng cách ưu tiên hàng đợi, có thể giảm độ phức tạp này xuống O(log(m)) với m bước hợp nhất
• Do đó độ phức tạp của Chameleon 2 là O( + n + (n + )log(m))
•
Trang 233.7 Cài đặt tham số
• Các tham số thuật toán được biểu diễn giá trị mặc định trong Bảng bên dưới Để thiết lập k, nên sử dụng k = a + c.ln (n), trong đó a và c là các hằng số Các hằng số này phải là các số nguyên nhỏ vì khi k quá lớn, các nút có thể được kết nối với các nút lân cận ở xa, dẫn đến kết quả không được chính xác
Tham số Mô tả Giá trị mặc định
k α β
Similarity Bisection
Số lượng nút lân cận (kNN)
Độ ưu tiên lân cận
Độ kết nối lân cận Kích thước phân vùng tối đa Xác định thứ tự hợp nhất Thuật toán phân tách Yếu tố cho các cụm nhỏ
2ln(n) 2.0 1.0 Max {5,n/100}
BBK Fiduccia–Mattheyses
Tham số Mô tả Giá trị mặc định
Số lượng nút lân cận (kNN)
Độ ưu tiên lân cận
Độ kết nối lân cận Kích thước phân vùng tối đa Xác định thứ tự hợp nhất Thuật toán phân tách Yếu tố cho các cụm nhỏ
Trang 254.1 Biểu diễn biểu đồ thị Dendogram
• Biểu đồ Dendogram thường được sử dụng để mô tả cấu trúc phân cấp, đôi
khi kết hợp với bản đồ nhiệt
• Dựa vào hình bên, một số thay đổi nhất định so với biểu đồ dendogram
truyền thống đã được thực hiện: thay vì hiển thị các phần tử riêng lẻ, mức
dendrogram thấp nhất đại diện cho các cụm nhỏ được tạo ra trong giai đoạn
Trang 264.1 Biểu diễn biểu đồ thị Dendogram
• Cuối cùng, chiều cao nút được xác định lại Thông thường, chiều cao của mỗi nút ở cấp thứ I (mỗi cấp đại diện cho sự hợp nhất của 2 cụm) được định nghĩa là khoảng cách giữa các cụm , ở cấp độ x và y, sau đó được hợp nhất vào cụm như sau:
, (12)
• Trong đó d (·, ·) là hàm khoảng cách giữa hai cụm Chiều cao của dendrogram được xác định là:
, (13)
•
Trang 274.2 Bước cắt đầu tiên
• Bước cắt đầu tiên (First jump cutoff - Ch2-FJ) là một phương pháp dựa trên ý tưởng rằng khoảng cách lớn đầu tiên giữa các cấp cây là nơi các cụm nên được chia
• Để giữ cho các cụm khác nhau tách biệt sau quá trình phân tách, thuật toán đã cắt càng gần gốc cây trên biểu đồ dendogram càng tốt
• Thuật toán Bước cắt đầu tiên được biểu diễn ở trang sau
Trang 284.2 Bước cắt đầu tiên
Thuật toán 2: First jump cutoff
Funtion FirstJump(mult, factor)
Dữ liệu: biểu đồ dendogram
Kết quả: Chiều cao của cây được đề xuất để cắt
if upper - lower > jump then
return lower + (upper − lower ) / 2
lower ← upper
return 0