【问题标题】:Multi-label feature selection using sklearn使用 sklearn 进行多标签特征选择
【发布时间】:2016-08-30 11:10:03
【问题描述】:

我希望使用 sklearn 对多标签数据集执行特征选择。我想获得标签的最终特征集,然后我将在另一个机器学习包中使用它们。本来打算用我看到的here的方法,分别为每个标签选择相关的特征。

from sklearn.svm import LinearSVC
from sklearn.feature_selection import chi2, SelectKBest
from sklearn.multiclass import OneVsRestClassifier
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
                ('svm', LinearSVC())])
multi_clf = OneVsRestClassifier(clf)

然后我计划使用以下方法提取包含的特征的索引,每个标签:

selected_features = []
for i in multi_clf.estimators_:
    selected_features += list(i.named_steps["chi2"].get_support(indices=True))

现在,我的问题是,如何选择要包含在最终模型中的选定功能?我可以使用每一个独特的特征(包括只与一个标签相关的特征),或者我可以做一些事情来选择与更多标签相关的特征。

我最初的想法是创建一个选择给定特征的标签数量的直方图,并根据视觉检查确定一个阈值。我担心的是这种方法是主观的。有没有更原则的方法来使用 sklearn 对多标签数据集执行特征选择?

【问题讨论】:

    标签: python-2.7 machine-learning scikit-learn feature-selection multilabel-classification


    【解决方案1】:

    根据这个paper中的结论:

    [...] 根据平均值或最大值对特征进行排序 所有标签的卡方得分,导致大多数最好的 分类器,同时使用较少的特征。

    然后,为了选择一个好的特性子集,您只需要这样做(类似):

    from sklearn.feature_selection import chi2, SelectKBest
    
    selected_features = [] 
    for label in labels:
        selector = SelectKBest(chi2, k='all')
        selector.fit(X, Y[label])
        selected_features.append(list(selector.scores_))
    
    // MeanCS 
    selected_features = np.mean(selected_features, axis=0) > threshold
    // MaxCS
    selected_features = np.max(selected_features, axis=0) > threshold
    

    注意:在上面的代码中,我假设 X 是某个文本矢量化器(文本的矢量化版本)的输出,Y 是一个熊猫数据框,每个标签有一列(所以我可以选择列 @987654323 @)。此外,还有一个阈值变量需要事先固定。

    【讨论】:

      【解决方案2】:

      http://scikit-learn.org/stable/modules/feature_selection.html

      有很多选项,但 SelectKBest 和递归特征消除是两个相当流行的选项。

      RFE 的工作原理是将统一特征排除在模型之外,然后重新训练并比较结果,以便最后留下的特征能够实现最佳预测精度。

      什么是最好的很大程度上取决于您的数据和用例。

      除了可以粗略地描述为特征选择的交叉验证方法之外,您还可以查看贝叶斯模型选择,这是一种更具理论性的方法,并且倾向于更简单的模型而不是复杂的模型。

      【讨论】:

      • 据我了解,sklearn中的特征选择方法是针对二元分类器的。您可以单独获取每个标签的选定特征,但我的问题是如何确定最终的一组特征,以有原则的方式适用于所有标签。
      • 我不确定我理解你的意思。例如,SelectKBest 与模型无关,您可以查看 RFE 示例,该示例向您展示如何在文档中获取最终功能集。 scikit-learn.org/stable/auto_examples/feature_selection/… 此外,许多/大多数实现了一个转换特征,该特征将从输入中选择训练过的最佳特征。
      • 但最终的特征集是针对一个分类器的,对吧?由于二元相关方法将多标签分类问题分解为一系列二元分类,因此最终特征集仅对应于我的众多标签中的一个。我将通过特征选择方法为我的每个标签返回一个特征集,但我想组合选定的特征来创建一个适用于所有标签的特征集。
      • 我发布的链接有一个 8 类、25 个特征分类问题的工作示例,RFECV 特征选择方法适用于该问题。我知道 one v all 分类器可能无法按照您的意愿工作,但是正如我所链接的那样,还有很多其他方法可以完全按照您的意愿工作。特征选择不必使用您在最终形式中使用的相同模型(并且这种方法可以增加模型过度拟合的容易程度的想法有一定的有效性)。
      猜你喜欢
      • 2017-04-06
      • 2017-04-26
      • 2019-01-12
      • 2014-09-21
      • 2021-07-19
      • 2018-05-23
      • 2013-08-15
      • 2016-03-16
      • 1970-01-01
      相关资源
      最近更新 更多