Я делаю иерархическую кластеризацию 2 размерных матриц метрикой расстояния корреляции (т.е. 1 - корреляция Pearson). Мой код следующий (данные находятся в переменной, названной "данными"):
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 ]]
Я не вижу, как pdist мог когда-либо производить отрицательные числа при взятии 1 - pearson корреляция. Какие-либо идеи об этом?
спасибо.
Возникают прекрасные проблемы с плавающей запятой. Если вы посмотрите на результаты pdist, то обнаружите в них очень маленькие отрицательные числа (-2.22044605e-16). По сути, они должны быть равны нулю. Если хотите, можете использовать для этого функцию numpy's clip.