2015-10-08 16 views
5

Tôi có ma trận tương tự giữa bốn người dùng. Tôi muốn làm một cụm kết tụ. mã là như thế này:sklearn dữ liệu đầu vào nhóm kết hợp thu thập dữ liệu

lena = np.matrix('1 1 0 0;1 1 0 0;0 0 1 0.2;0 0 0.2 1') 
X = np.reshape(lena, (-1, 1)) 

print("Compute structured hierarchical clustering...") 
st = time.time() 
n_clusters = 3 # number of regionsle 


ward = AgglomerativeClustering(n_clusters=n_clusters, 
     linkage='complete').fit(X) 
print ward 
label = np.reshape(ward.labels_, lena.shape) 
print("Elapsed time: ", time.time() - st) 
print("Number of pixels: ", label.size) 
print("Number of clusters: ", np.unique(label).size) 
print label 

in kết quả của nhãn giống như:

[[1 1 0 0] 
[1 1 0 0] 
[0 0 1 2] 
[0 0 2 1]] 

Điều này có nghĩa nó mang lại một danh sách các cụm kết quả tốt, chúng ta có thể chọn một từ họ? như chọn: [0,0,2,1]. Nếu sai, bạn có thể cho tôi biết cách làm thuật toán kết tụ dựa trên sự giống nhau không? Nếu nó là đúng, ma trận tương tự là rất lớn, làm thế nào tôi có thể chọn kết quả phân cụm tối ưu từ một danh sách lớn? Cảm ơn

Trả lời

1

Tôi nghĩ vấn đề ở đây là bạn phù hợp với mô hình của bạn với số liệu sai

# This will return a 4x4 matrix (similarity matrix) 
lena = np.matrix('1 1 0 0;1 1 0 0;0 0 1 0.2;0 0 0.2 1') 

# However this will return 16x1 matrix 
X = np.reshape(lena, (-1, 1)) 

Kết quả đúng bạn nhận được là thế này:

ward.labels_ 
>> array([1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 2, 0, 0, 2, 1]) 

Đó là nhãn của mỗi phần tử trong X vector và nó không làm cho cảm giác

Nếu tôi hiểu rõ vấn đề của bạn, bạn cần phải phân loại người dùng của bạn theo khoảng cách giữa chúng (tương tự). Vâng, trong trường hợp này, tôi sẽ đề nghị sử dụng phân cụm phổ theo cách này:

import numpy as np 
from sklearn.cluster import SpectralClustering 

lena = np.matrix('1 1 0 0;1 1 0 0;0 0 1 0.2;0 0 0.2 1') 

n_clusters = 3 
SpectralClustering(n_clusters).fit_predict(lena) 

>> array([1, 1, 0, 2], dtype=int32) 
+0

Nhưng nếu anh ta cần phân cụm theo thứ bậc thì sao? – Itay

Các vấn đề liên quan