2010-05-25 4 views
9

Как запустить иерархическую кластеризацию на корреляционной матрице в scipy/numpy? У меня есть матрица из 100 строк по 9 столбцов, и я хотел бы иерархически кластеризовать по корреляциям каждой записи в 9 условиях. Я бы хотел использовать корреляцию 1-pearson как расстояния для кластеризации. Предполагая, что у меня есть массив numpy «X», который содержит матрицу 100 x 9, как я могу это сделать?иерархическая кластеризация на корреляциях в Python scipy/numpy?

Я попытался с помощью hcluster, основываясь на этом примере:

Y=pdist(X, 'seuclidean') 
Z=linkage(Y, 'single') 
dendrogram(Z, color_threshold=0) 

однако, pdist не то, что я хочу, так как это евклидово расстояние. Есть идеи?

спасибо.

ответ

6

Просто измените метрику correlation так, что первая строка станет:

Y=pdist(X, 'correlation') 

Однако, я считаю, что код может быть упрощен просто:

Z=linkage(X, 'single', 'correlation') 
dendrogram(Z, color_threshold=0) 

потому, что связь будет заботиться о pdist для вас.

+1

Существует ли «корреляция» здесь Пирсон или Спирмен? Кроме того, не должно быть 1 - pearson, чтобы быть допустимой метрикой расстояния, которую можно использовать для pdist? Действительно ли pdist делает это автоматически? Благодарю. – user248237dfsf

+2

Похоже, что это 1 - pearson для меня. Вы можете посмотреть на него самостоятельно в site-packages/scipy/spaces/distance.py –

+2

Это довольно редкий случай, когда упомянутая выше корреляция означает корреляцию Спирмена. Обычно, если это Спирмен, люди скажут это, иначе возьмите Пирсона. – dwf

Смежные вопросы