特征集聚:如何检索组成集群的特征?

Feature agglomeration: How to retrieve the features that make up the clusters?

我正在使用 scikit-learn 的特征聚集来对特征而不是观察结果使用层次聚类过程。

这是我的代码:

from sklearn import cluster
import pandas as pd

#load the data
df = pd.read_csv('C:/Documents/data.csv')
agglo = cluster.FeatureAgglomeration(n_clusters=5)
agglo.fit(df)
df_reduced = agglo.transform(df)

我原来的 df 的形状是 (990, 15),在使用特征聚集后,df_reduced 现在是 (990, 5)。

现在如何找出原来的15个特征是如何聚类在一起的?换句话说,df_reduced?

中的 5 个新特征分别由哪些来自 df 的原始特征组成?

拟合聚类器后,agglo.labels_ 包含一个列表,说明原始数据集中的每个特征属于缩减数据集中的哪个聚类。

转换过程中每个聚类中的特征如何组合的方式由您执行层次聚类的方式设置。减少的特征集仅由 n_clusters 个聚类中心(它们是 n_samples - 维向量)组成。对于某些应用程序,您可能会想到使用不同的聚类中心定义手动计算中心(即中位数而不是均值以避免异常值等的影响)。

n_features = 15
feature_identifier = range(n_features)
feature_groups = [np.array(feature_identifier )[agglo.labels_==i] for i in range(n_clusters)]
new_features = [df.loc[:,df.keys()[group]].mean(0) for group in feature_groups]

不要忘记事先标准化功能(例如使用 sklearn 的缩放器)。否则,您宁愿对数量的尺度进行分组,而不是对相似的行为进行聚类。 希望有帮助! 还没有测试代码。如果有问题请告诉我。