我有4个集群,我需要在每个集群中找到最有影响力的功能集,这样我才能对集群的特征有一些了解,从而了解这些集群的行为。我该怎么办?
答案 0 :(得分:0)
我使用的方法是训练一个分类器来预测每个聚类标签(如果对应的聚类,则为1,否则为0),然后使用模型属性来确定每个聚类中最具区别性的变量。我一直在尝试使用RandomForest和属性feature_importances_进行此操作,并且始终获得很好的效果。
然后我使用箱线图/密度图来表示每个群集中这些变量的分布。
您还可以使用更传统的方法,例如按聚类比较每个变量的均值,并使用方差分析等统计检验来获得更可靠的结果。
编辑:这是Python中的示例:
for cl in data.cluster.unique():
custom_target = data.cluster.copy()
custom_target.loc[custom_target != cl] = -1
custom_target.loc[custom_target == cl] = 1
clf = RandomForestClassifier(100 , random_state = 10)
clf.fit(data.values[: , 1:-4], custom_target)
imps , features = zip(*sorted(zip(clf.feature_importances_, cols) , reverse = True))
# store the results as you like
答案 1 :(得分:0)
解决该问题的基本方法是找到簇质心特征的描述性统计量。
找到最具影响力的变量的代码段:
var_influence=cc.describe() #cc contains the cluster centroids
# The descriptive statistics of the cluster centroids are saved in a Dataframe var_influence. Sorting by standard deviation will give the variables with high standard deviation.
var_influence.sort_values(axis=1, by='std', ascending=False).iloc[:,:10]
通过这种方法,与箱形图方法相比,更快,更好地找到影响变量(随着功能的增加,很难直观地看到)。由于所有变量均已标准化,因此很容易在要素之间进行比较。
也可以使用最大-最小方法,这将使我们能够看到具有最大带宽的变量。由于所有变量均已标准化,因此max-min是验证上述结果的一种好方法。下面的代码与之相同
pd.Series(var_influence.loc['max']-var_influence.loc['min']).sort_values(ascending=False)[:10]
多类分类
查找影响特征的一种更严肃的方法是多类分类:将簇标签用作目标变量,以在数据上训练多类分类模型。所得模型系数可用于确定特征的重要性。