2014-11-11 1 views
0

Я не могу понять, как иерархическая кластеризация SciPy вычисляет расстояние между исходными точками или кластерами в дендрограмме.Расчет расстояния в иерархической кластеризации «полная» связь

import scipy.cluster.hierarchy as hclus 
import numpy 
import cPickle 

distmatrix = cPickle.load(open("mydistmatrix.pkl", "rb")) 
print distmatrix 

dendogram = hclus.linkage(distmatrix, method="complete") 
numpy.savetxt("mydendogram.txt", dendogram, fmt='%.1f') 

DistMatrix как указано ниже, правильно напечатан. Я также печатаю файл mydendogram.txt, о котором я не могу понять.

Матрица расстояний. Я добавила i- как номер строки, это не часть матрицы.

0- [[ 0 11 68 60 60 60 61 7 17 73] 
1- [11 0 68 52 52 51 55 17 6 73] 
2- [68 68 0 90 90 91 94 73 73 6] 
3- [60 52 90 0 10 11 36 62 55 92] 
4- [60 52 90 10 0 2 36 63 55 92] 
5- [60 51 91 11 2 0 36 63 54 93] 
6- [61 55 94 36 36 36 0 63 57 96] 
7- [ 7 17 73 62 63 63 63 0 11 68] 
8- [17 6 73 55 55 54 57 11 0 68] 
9- [73 73 6 92 92 93 96 68 68 0]] 

Dendogram - Я приложил номер шага я и новый узел п + я в конце для удобства чтения, а не часть dendogram.

0 - 4.0 5.0 3.6 2.0 - 10 
1 - 2.0 9.0 13.7 2.0 - 11 
2 - 1.0 8.0 15.0 2.0 - 12 
3 - 0.0 7.0 15.7 2.0 - 13 
4 - 3.0 10.0 17.6 3.0 - 14 
5 - 12.0 13.0 33.1 4.0 - 15 
6 - 6.0 14.0 66.9 4.0 - 16 
7 - 15.0 16.0 148.1 8.0 - 17 
8 - 11.0 17.0 208.9 10.0 - 18 

Теперь я могу понять, узел 4 и 5 будут объединены сначала, как расстояние между ними является самым маленьким в расстоянии матрице, но расстояние в матрице 2, но в 3,6 dendogram. Аналогичным образом расстояние между узлами 2 и 9 равно 6, но дендрограмма показывает 13.7. Максимальное расстояние составляет 208,9 дендрограммы, даже если максимальное число в матрице расстояния равно 96. Кажется, что порядок слияния верен, но я не понимаю, как вычисляется расстояние, и это важно для меня, чтобы определить подходящий пункт, чтобы сократить дерево до получить кластеры. Документация (http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html#scipy.cluster.hierarchy.linkage) не помогает.

Просьба пояснить.

+0

Найдено решение в другом месте, в смежных вопросах (который не появлялся на поиске) - http://stackoverflow.com/questions/18952587/use-distance-matrix-in-scipy-cluster-hierarchy-linkage?rq=1 – mlworker

ответ

1

Это помогает - Use Distance Matrix in scipy.cluster.hierarchy.linkage()?

import scipy.spatial.distance as ssd 
distmatrix = ssd.squareform(distmatrix + distmatrix.T) 

(Не уверен, что если вопрос должен быть удален, или хранится в удобный справочник)

+0

Также рекомендуется принимать ваши собственные ответы (например, здесь), потому что это может помогите другим пользователям! Благодаря! – LyzandeR