我使用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的原始特性构成df_reduced中的5个新特征中的每一个?
答案 0 :(得分:1)
在拟合聚类器之后,agglo.labels_
包含一个列表,该列表告知原始数据集中每个特征属于简化数据集中的哪个聚类。
答案 1 :(得分:1)
在转换期间如何组合每个聚类中的要素的方式由您执行层次聚类的方式设置。简化的特征集只包含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的缩放器)。否则,您宁愿对数量的比例进行分组,而不是聚类相似的行为。 希望有所帮助! 没有测试过代码。如果有问题,请告诉我。