Я использую seaborn clustermap
для создания кластеров, и визуально он отлично работает (этот example дает очень похожие результаты).Извлечение кластеров из морской кластерной карты
Однако мне трудно понять, как программно извлекать кластеры. Например, в примере ссылки, как я могу узнать, что 1-1 rh, 1-1 lh, 5-1 rh, 5-1 lh сделать хороший кластер? Визуально это легко. Я пытаюсь использовать методы просматривал данные и дендрограммы, но у меня мало успеха
EDIT код из примера:
import pandas as pd
import seaborn as sns
sns.set(font="monospace")
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
used_networks = [1, 5, 6, 7, 8, 11, 12, 13, 16, 17]
used_columns = (df.columns.get_level_values("network")
.astype(int)
.isin(used_networks))
df = df.loc[:, used_columns]
network_pal = sns.cubehelix_palette(len(used_networks),
light=.9, dark=.1, reverse=True,
start=1, rot=-2)
network_lut = dict(zip(map(str, used_networks), network_pal))
networks = df.columns.get_level_values("network")
network_colors = pd.Series(networks).map(network_lut)
cmap = sns.diverging_palette(h_neg=210, h_pos=350, s=90, l=30, as_cmap=True)
result = sns.clustermap(df.corr(), row_colors=network_colors, method="average",
col_colors=network_colors, figsize=(13, 13), cmap=cmap)
Как я могу вытащить какие модели, в которых кластеры из от result
?
EDIT2result
действительно несет с собой linkage
в с dendrogram_col
который я думаю, будет работать с fcluster. Но пороговое значение для выбора, которое меня путает. Я бы предположил, что значения в тепловой карте, которые выше порога, будут сгруппированы вместе?
Эй, @ Марсель М, разве вы не хотите использовать «матрицу несходства» вместо корреляционной матрицы? Как '1 - np.abs (корреляции)' или что-то еще? –
@ O.rka Передача корреляций с 'sns.clustermap()' происходит из приведенного в вопросе морского примера, который я только что скопировал. Обе версии вычисляют расстояния между корреляциями, поэтому на самом деле расстояния фактически используются, но я признаю, что не знаю, насколько это важно для этого (я не знаю, почему это делает пример с морскими судами). В моем собственном проекте я использую дистанции напрямую. –