2010-05-30 40 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