如何找到集群中有影响力的特征集?

时间:2018-07-03 07:04:56

标签: machine-learning cluster-analysis unsupervised-learning

我有4个集群,我需要在每个集群中找到最有影响力的功能集,这样我才能对集群的特征有一些了解,从而了解这些集群的行为。我该怎么办?

2 个答案:

答案 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]

多类分类

查找影响特征的一种更严肃的方法是多类分类:将簇标签用作目标变量,以在数据上训练多类分类模型。所得模型系数可用于确定特征的重要性。