0

У меня есть матрица NxM со значениями, которые варьируются от 0 до 20. Я легко получаю тепловую карту с помощью Matplotlib и pcolor. Теперь я хотел бы применить иерархическую кластеризацию и дендрограмму с использованием scipy. Я хотел бы переупорядочить каждое измерение (строки и столбцы), чтобы показать, какой элемент подобен (в соответствии с результатом кластеризации). Если матрица будет квадрат (NxN) код будет что-то вроде:Иерархическая кластеризация Heatmap в python

clustering = linkage(matrix, method="average") 
dendrogram(clustering, orientation='right') 

Как я могу получить матрицу сцепления, когда размеры различны? Должен ли я каждый раз вычислять каждое расстояние между каждой парой элементов?

+0

Посмотрите документацию на 'linkage' функции http://docs.scipy.org/doc/scipy-0.14. 0/ссылка/полученные/scipy.cluster.hierarchy.linkage.html # scipy.cluster.hierarchy.linkage. 'linkage' не берет вашу матрицу наблюдений, а матрицу расстояний. Поэтому вам сначала нужно выбрать подходящую дистанционную меру и вычислить матрицу попарных расстояний. – cel

+1

Я просто положил это на github: https://github.com/WarrenWeckesser/heatmapcluster –

ответ

0

Я не уверен, как это сделать, используя Matplotlib и pcolor, однако в морских пакетах есть встроенная поддержка того, что вы пытаетесь выполнить.

http://seaborn.pydata.org/generated/seaborn.clustermap.html

Пример:

import seaborn as sns; sns.set() 
flights = sns.load_dataset("flights") 
flights = flights.pivot("month", "year", "passengers") 
g = sns.clustermap(flights) 

Example clustergram

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