sorunu

2010-05-30 34 views
10

Bir korelasyon mesafesi metriği (yani 1 - Pearson korelasyon) tarafından 2 boyutlu bir matris kümelenmesini hiyerarşik bir şekilde yapıyorum.sorunu

from hcluster import * 

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

alıyorum hatadır:

ValueError: Linkage 'Z' contains negative distances. 

bu hataya neden nedir Kodum aşağıdaki (veri "veri" olarak adlandırılan bir değişken olan) nedir? Kullandığım matris "veri" basitçe:

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

Ben 1 çekerken pdist negatif sayılar üreteceğine nasıl görmüyorum - Pearson korelasyon. Bu konuda bir fikrin var mı?

Teşekkürler.

cevap

5

Bazı güzel kayan nokta sorunları oluyor. Eğer pdist'in sonuçlarına bakarsanız, içinde çok küçük negatif rakamlar (-2.22044605e-16) bulunur. Esasen sıfır olmalılar. İsterseniz uyuşmak için numpy'nin klip işlevini kullanabilirsiniz.

+0

Aşağıdaki çalıştı ama işe değildi: # 'korelasyon' Y = klipsiyle pdist, Y hesaplamak (Y, 0, 1) ve yukarıda gösterim matris için elde kümelenmemeler çok olan tuhaf. Ne olabileceği hakkında bir fikrin var mı? Bu sadece pdist'e karşı argüman olarak 'korelasyon' ile olur. – user248237dfsf

+1

'Y [abs (Y) <3e-16] = 0.0' gibi bir şey kullanmayı deneyebilirsiniz, çünkü çok küçük pozitif mesafeleriniz de vardır. Bazen böyle sayılar gerçekten bir şeyler atabilir. Kümelenme modülünü oldukça açık bir şekilde kullanma deneyimim yok. Belki de küme tipi için 'ortalama' kullanarak yapmak gerekebilir? –