2010-05-30 42 views
10

我正在用相關距離度量(即1-皮爾森相關)對2維矩陣進行層次聚類。我的代碼如下(該數據在一個名爲「數據」變量):Python中的層次聚類問題

from hcluster import * 

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

我得到的錯誤是:

ValueError: Linkage 'Z' contains negative distances. 

是什麼原因導致這個錯誤?矩陣「數據」,我用很簡單:

[[ 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 ]] 

我不知道怎麼走1個時pdist所能產生負數 - 皮爾森相關。對此有何想法?

謝謝。

回答

5

有一些可愛的浮點問題正在進行。如果你看看pdist的結果,你會發現它們中有非常小的負數(-2.22044605e-16)。從本質上講,它們應該是零。如果你願意,你可以使用numpy的剪輯功能來處理它。

+0

我嘗試以下但它沒有工作: #使用「相關」 Y =剪輯從pdist計算Y(Y,0,1) ,我得到的矩陣I上面表明的聚類是非常奇怪的。任何想法可能發生什麼?這隻會發生在'關聯'作爲pdist的參數。 – user248237dfsf 2010-05-31 03:42:25

+1

您可以嘗試使用類似'Y [abs(Y)<3e-16] = 0.0'的東西,因爲您也有一些非常小的正距離。有時像這樣的數字可以真正拋棄。坦率地說,我沒有太多的使用聚類模塊的經驗。它可能與使用'平均'的集羣類型可能有關嗎? – 2010-05-31 04:20:48