2011-11-04 18 views
6

Tôi có một tập dữ liệu 2 chiều đơn giản mà tôi muốn nhóm theo cách kết hợp (không biết số cụm tối ưu để sử dụng). Cách duy nhất tôi đã có thể cụm dữ liệu của tôi thành công là bằng cách cho hàm một giá trị 'maxclust'.Cụm kết tụ trong Matlab

Để đơn giản, giả sử đây là bộ dữ liệu của tôi:

X=[ 1,1; 
    1,2; 
    2,2; 
    2,1; 
    5,4; 
    5,5; 
    6,5; 
    6,4 ]; 

Đương nhiên, tôi sẽ muốn dữ liệu này để tạo thành 2 cụm. Tôi hiểu rằng nếu tôi biết điều này, tôi chỉ có thể nói:

T = clusterdata(X,'maxclust',2); 

và để tìm mà chỉ rơi vào từng cụm Tôi có thể nói:

cluster_1 = X(T==1, :); 

cluster_2 = X(T==2, :); 

nhưng không biết rằng 2 cụm sẽ tối ưu cho tập dữ liệu này, làm cách nào để nhóm các dữ liệu này?

Cảm ơn

+0

câu hỏi tương tự: [Điều gì ngăn chặn tiêu chí cho phân cụm kết tụ phân cấp được sử dụng trong thực tế?] (Http://stats.stackexchange.com/q/2597) – Amro

+0

@Amro Liên kết đẹp! –

Trả lời

5

Toàn bộ vấn đề của phương pháp này là nó đại diện cho cụm tìm thấy trong một hệ thống phân cấp, và nó là tùy thuộc vào bạn để xác định có bao nhiêu chi tiết bạn muốn nhận được ..

agglomerative dendogram

Hãy suy nghĩ về điều này khi có một đường ngang giao nhau với dendrogram, di chuyển bắt đầu từ 0 (mỗi điểm là cụm riêng của nó) tất cả các cách để giá trị tối đa (tất cả các điểm trong một cụm). Bạn có thể:

  • dừng khi bạn đạt được một số định trước của cụm (example)
  • tay vị trí của nó được đưa ra một giá trị chiều cao nhất định (example)
  • chọn để đặt nó nơi các cụm được quá xa nhau theo với tiêu chí khoảng cách (tức là có một bước nhảy lớn để cấp độ tiếp theo) (example)

này có thể được thực hiện bằng cách sử dụng 'maxclust' hoặc 'cutoff' lập luận của Các hàm CLUSTER/CLUSTERDATA

+0

Giải thích tuyệt vời, Amro. Tôi nhận thấy đây là một chủ đề mà bạn dường như có nhiều kinh nghiệm. Các liên kết đó đều rất hữu ích cho ứng dụng của tôi. Cảm ơn! –

5

Để chọn số lượng cụm tối ưu, một cách tiếp cận chung là tạo một lô tương tự như Lô Scree. Sau đó, bạn tìm "khuỷu tay" trong cốt truyện, và đó là số cụm bạn chọn. Đối với tiêu chí ở đây, chúng tôi sẽ sử dụng trong vòng cụm sum-of-ô vuông:

function wss = plotScree(X, n) 

wss = zeros(1, n); 
wss(1) = (size(X, 1)-1) * sum(var(X, [], 1)); 
for i=2:n 
    T = clusterdata(X,'maxclust',i); 
    wss(i) = sum((grpstats(T, T, 'numel')-1) .* sum(grpstats(X, T, 'var'), 2)); 
end 
hold on 
plot(wss) 
plot(wss, '.') 
xlabel('Number of clusters') 
ylabel('Within-cluster sum-of-squares') 
>> plotScree(X, 5) 

ans = 

    54.0000 4.0000 3.3333 2.5000 2.0000 

enter image description here

+0

tổng diện tích hình vuông trong cụm có thể không phải lúc nào cũng là tiêu chí tốt, đặc biệt là khi phân cụm theo mặc định để sử dụng phương pháp liên kết đơn, theo định nghĩa, chỉ muốn tách (giữa các cụm) và không quan tâm đến độ nhỏ gọn hoặc số dư (trong cụm) – Amro

+0

Cảm ơn mã này. Nó đặc biệt hữu ích khi kết hợp với phương pháp được sử dụng trong liên kết thứ ba được chia sẻ bởi Amro. –

-1

Bạn có thể sử dụng gói NbClust trong R sử dụng 30 chỉ số để xác định số cụm tối ưu trong tập dữ liệu.