После кластеризации функций по «расстоянию корреляции» друг от друга мне теперь нужно выбрать из каждого кластера только функцию с наилучшей корреляцией с целью. .
Я выполняю этот шаг выбора объектов после того, как уже отфильтровал 100 объектов, поэтому я распределяю объекты по 30 кластерам.
Код: Выделить всё
from scipy.cluster.hierarchy import linkage, fcluster
from scipy.spatial.distance import pdist
corr_matrix = df_top_100.corr().abs()
distance_matrix = 1 - corr_matrix
Z = linkage(pdist(distance_matrix), method='ward')
clusters = fcluster(Z, t=30, criterion='maxclust')
clustered_features = pd.DataFrame({'feature': df_top_100.columns, 'cluster': clusters})
clustered_features.sort_values(by='cluster')
Код: Выделить всё
feature cluster
0 m2512.82 1
1 m2514.75 1
2 m2516.68 1
3 m2510.89 1
4 m2518.61 1
... ... ...
28 m1056.81 26
19 m1064.53 27
22 m1066.45 28
18 m1062.6 29
20 m1060.67 30
100 rows × 2 columns
Код: Выделить всё
clustered_features['corr_with_SOC'] = clustered_features['feature'].map(df[top_100_features].corrwith(df['SOC']))
Код: Выделить всё
feature cluster corr_with_SOC
0 m2512.82 1 0.633739
1 m2514.75 1 0.633690
2 m2516.68 1 0.633343
3 m2510.89 1 0.633246
4 m2518.61 1 0.632762
... ... ... ...
28 m1056.81 26 0.603756
19 m1064.53 27 0.611138
22 m1066.45 28 0.609888
18 m1062.6 29 0.611323
20 m1060.67 30 0.610205
100 rows × 3 columns
Код: Выделить всё
clustered_features.sort_values(by=['cluster', 'corr with SOC'], ascending=[True, False])
Подробнее здесь: https://stackoverflow.com/questions/793 ... each-group