【问题标题】:how to find the set of influential features in clusters?如何在集群中找到一组有影响力的特征?
【发布时间】:2018-12-11 09:45:39
【问题描述】:

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

【问题讨论】:

  • 1.这个问题如果在 SO 上跑题了; 2. 这不是免费的代码编写服务; 3. 你的问题太宽泛(也就是说你的问题可能没有任何一般性的答案)。这个问题是如何获得 2 票赞成的,这超出了我的理解:它违反了所有可能的 SO 准则。
  • 我同意@EliKorvigo 的观点。在这个问题中没有什么实质性的东西可以被赞成。这个问题太宽泛了。 OP需要首先了解集群本质上是什么,因为如果您理解了它,那么您已经拥有集群中的相关功能。 OP检查“主成分分析”和/或多重对应分析。在我看来,下面给出的公认答案在统计上是不正确的。聚类是一种预处理算法,必须在分类任务之前使用,反之亦然,因为它在概念上是无稽之谈。

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


【解决方案1】:

解决该问题的一种基本方法是找到集群质心特征的描述性统计数据。

找到影响最大的变量的片段:

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]

多类分类

寻找影响特征的更重要的方法是多类分类:使用聚类标签作为目标变量,在数据上训练多类分类模型。得到的模型系数可用于确定特征的重要性。

【讨论】:

    【解决方案2】:

    我使用的方法是训练一个分类器来预测每个集群标签(如果是对应的集群,则为 1,否则为 0),然后使用模型属性来确定每个集群最具区分性的变量。我一直在使用 RandomForest 和 sickit learn 中的属性 feature_importances_ 来做这件事,我总是得到很好的结果。

    然后我使用箱线图/密度图来表示每个集群中这些变量的分布。

    您还可以使用更传统的方法,例如按集群比较每个变量的均值,并使用 ANOVA 等统计测试来获得更可靠的结果。

    编辑:这是一个 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
    

    【讨论】:

    • 谢谢@Ahmed。即使我尝试使用 RandomForest 来查找每个集群的有影响力的特征,但我认为我的方法存在一些错误,因为我得到所有特征的 feature_importances_ 值相同(在我的情况下为 0)。能否请您告诉应用 RandomForest 以获得每个集群有影响力的特征的正确方法。
    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 2020-01-10
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多