2013-04-11 45 views
16

nếu bạn có cuộc gọi này thứ bậc phân nhóm trong scipy bằng Python:Làm thế nào để tính toán các phép gán cụm từ ma trận liên kết/khoảng cách trong scipy bằng Python?

from scipy.cluster.hierarchy import linkage 
# dist_matrix is long form distance matrix 
linkage_matrix = linkage(squareform(dist_matrix), linkage_method) 

sau đó một cách hiệu quả để đi từ này để tập cluster cho điểm cá nhân là gì? ví dụ: vectơ có độ dài N trong đó N là số điểm, trong đó mỗi mục nhập i là số cụm của điểm i, với số cụm được tạo bởi một ngưỡng nhất định thresh trên cụm kết quả?

Để làm rõ: Số cụm sẽ là cụm mà nó nằm sau khi áp dụng ngưỡng cho cây. Trong trường hợp đó, bạn sẽ nhận được một cụm duy nhất cho mỗi nút lá cho cụm mà nó ở. Độc đáo theo nghĩa là mỗi điểm thuộc về một "cụm cụ thể nhất" được xác định bởi ngưỡng mà bạn cắt dendrogram.

Tôi biết rằng scipy.cluster.hierarchy.fclusterdata cung cấp cho bạn phép gán cụm này làm giá trị trả về, nhưng tôi bắt đầu từ ma trận khoảng cách được tùy chỉnh và chỉ số khoảng cách, vì vậy tôi không thể sử dụng fclusterdata. Câu hỏi đặt ra là: làm thế nào tôi có thể tính toán những gì fclusterdata là tính toán - các bài tập nhóm?

+1

Nếu bạn cung cấp cho squareform (dist_matrix) để liên kết(), ma trận được coi là quan sát và phân nhóm kết quả có thể không chính xác. Bạn có thể cung cấp cho vectơ ngưng tụ của ma trận khoảng cách trực tiếp làm đầu vào cho liên kết(). – HongboZhu

+0

chi tiết khác xem: https://github.com/scipy/scipy/issues/2614 – HongboZhu

Trả lời

14

Nếu tôi hiểu bạn phải, đó là những gì fcluster làm:

scipy.cluster.hierarchy.fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None)

hình thức cụm phẳng từ phân nhóm theo thứ bậc được xác định bởi ma trận liên kết Z.

...

Trả về: Một mảng có độ dài n. T [i] là số cụm phẳng mà tôi quan sát ban đầu.

Vì vậy, chỉ cần gọi fcluster(linkage_matrix, t), trong đó t là ngưỡng của bạn.