Używam seaborn clustermap
do tworzenia klastrów i wizualnie działa świetnie (to example daje bardzo podobne wyniki).Wyodrębnianie klastrów z selorn clustermap
Jednak mam problem z ustaleniem, jak programowo wyodrębnić klastry. Na przykład, w przykładowym łączu, jak mogę się dowiedzieć, że 1-1 rh, 1-1 lh, 5-1 rh, 5-1 lh tworzą dobre skupienie? Wizualnie to łatwe. Próbuję użyć metody pominie danych oraz dendrogramów ale mam mały sukces
EDIT kod z przykładu:
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)
Jak mogę wyciągnąć co modele są w klastrach, które się z result
?
EDIT2result
niesie z nim linkage
wz dendrogram_col
który myślę, że praca z fcluster. Ale wartość progowa do wyboru jest myląca. Zakładam, że wartości w mapie termicznej, które są wyższe niż próg, zostaną zebrane razem?
Hej @Marcel M, czy nie chciałbyś użyć "matrycy odmienności" zamiast macierzy korelacji? Jak '1 - np.abs (korelacje)' czy coś takiego? –
@ O.rka Przekazywanie korelacji do 'sns.clustermap()' pochodzi z przykładu seaborn cytowanego w pytaniu, które właśnie skopiowałem. Obie wersje obliczają odległości między korelacjami, więc na koniec w rzeczywistości są używane odległości, ale przyznaję, że nie wiem, jak wiele to robi (nie wiem, dlaczego robi to przykład). W moim własnym projekcie używam odległości bezpośrednio. –