2010-05-30 32 views
10

Tôi đang thực hiện phân cụm theo thứ bậc ma trận 2 chiều theo chỉ số khoảng cách tương quan (tức là 1 - tương quan Pearson). Mã của tôi là như sau (các dữ liệu trong một biến gọi là "data"):vấn đề với phân cụm theo cấp bậc trong Python

from hcluster import * 

Y = pdist(data, 'correlation') 
cluster_type = 'average' 
Z = linkage(Y, cluster_type) 
dendrogram(Z) 

Các lỗi tôi nhận được là:

ValueError: Linkage 'Z' contains negative distances. 

gì gây ra lỗi này? Ma trận "dữ liệu" mà tôi sử dụng chỉ đơn giản là:

[[ 156.651968 2345.168618] 
[ 158.089968 2032.840106] 
[ 207.996413 2786.779081] 
[ 151.885804 2286.70533 ] 
[ 154.33665 1967.74431 ] 
[ 150.060182 1931.991169] 
[ 133.800787 1978.539644] 
[ 112.743217 1478.903191] 
[ 125.388905 1422.3247 ]] 

Tôi không thấy pdist bao giờ có thể tạo ra số âm khi tham gia tương quan 1 - pearson. Bất kỳ ý tưởng về điều này?

cảm ơn bạn.

Trả lời

5

Có một số vấn đề về dấu phẩy động đáng yêu đang diễn ra. Nếu bạn nhìn vào kết quả của pdist, bạn sẽ thấy có những số âm rất nhỏ (-2.22044605e-16) trong chúng. Về cơ bản, họ nên bằng không. Bạn có thể sử dụng chức năng clip của numpy để xử lý nó nếu bạn muốn.

+0

Tôi đã thử các sau đây nhưng nó đã không làm việc: # tính Y từ pdist sử dụng 'tương quan' Y = clip (Y, 0, 1) và clusterings tôi nhận được cho ma trận tôi đã giới thiệu ở trên là rất kỳ dị. Bất kỳ ý tưởng gì có thể xảy ra? Điều này chỉ xảy ra với 'tương quan' làm đối số cho pdist. – user248237dfsf

+1

Bạn có thể thử sử dụng một cái gì đó như 'Y [abs (Y) <3e-16] = 0.0 'thay vì bạn cũng có khoảng cách rất nhỏ. Đôi khi những con số như thế thực sự có thể vứt bỏ mọi thứ. Tôi không có nhiều kinh nghiệm sử dụng mô-đun phân cụm khá thẳng thắn. Nó có thể liên quan đến việc sử dụng 'trung bình' cho kiểu cụm sao? –

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