Дендрограмма через Сципи с учетом матрицы сходства
Я вычислил матрицу подобия 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()