проблема с иерархической кластеризацией в Python

Я делаю иерархическую кластеризацию 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 корреляция. Какие-либо идеи об этом?

спасибо.

10
задан 30 May 2010 в 22:52
поделиться

1 ответ

Возникают прекрасные проблемы с плавающей запятой. Если вы посмотрите на результаты pdist, то обнаружите в них очень маленькие отрицательные числа (-2.22044605e-16). По сути, они должны быть равны нулю. Если хотите, можете использовать для этого функцию numpy's clip.

5
ответ дан 4 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: