проблема с иерархической кластеризацией в Python - PullRequest
10 голосов
/ 31 мая 2010

Я делаю иерархическую кластеризацию 2-мерной матрицы по метрике корреляционного расстояния (т.е. 1 - корреляция Пирсона). Мой код следующий (данные находятся в переменной с именем «данные»):

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 - корреляцию Пирсона. Есть идеи по этому поводу?

спасибо.

1 Ответ

5 голосов
/ 31 мая 2010

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

...