Дендрограмма через Сципи с учетом матрицы сходства

Я вычислил матрицу подобия jaccard с помощью Python. Я хочу сгруппировать наивысшее сходство с наименьшим, однако, независимо от того, какую функцию связи я использую, она создает одну и ту же дендрограмму! У меня есть ощущение, что функция предполагает, что в моей матрице исходные данные, но я уже вычислил первую матрицу подобия. Есть ли способ передать эту матрицу сходства через дендрограмму, чтобы она отображалась правильно? Или мне придется вывести матрицу и просто сделать это с помощью R. Передача исходных необработанных данных невозможна, так как я вычисляю сходство слов. Спасибо за помощь!

Вот некоторый код:

SimMatrix = [[ 0.,0.09259259,  0.125     ,  0.        ,  0.08571429],
   [ 0.09259259,  0.        ,  0.05555556,  0.        ,  0.05128205],
   [ 0.125     ,  0.05555556,  0.        ,  0.03571429,  0.05882353],
   [ 0.        ,  0.        ,  0.03571429,  0.        ,  0.        ],
   [ 0.08571429,  0.05128205,  0.05882353,  0.        ,  0.        ]]

linkage = hcluster.complete(SimMatrix) #doesnt matter what linkage...
dendro  = hcluster.dendrogram(linkage) #same plot for all types?
show()

Если вы запустите этот код, вы увидите дендрограмму, полностью обратную. Независимо от того, какой тип связи я использую, он создает одну и ту же дендрограмму. Это интуитивно не может быть правильным!

1 ответ

Решение

Вот решение. Оказывается, SimMatrix нужно сначала преобразовать в сжатую матрицу (диагональ, вверху справа или внизу слева, этой матрицы). Вы можете увидеть это в коде ниже:

import scipy.spatial.distance as ssd
distVec = ssd.squareform(SimMatrix)
linkage = hcluster.linkage(1 - distVec)
dendro  = hcluster.dendrogram(linkage)
show()
Другие вопросы по тегам