【问题标题】:Determine most important feature per class确定每个类最重要的特征
【发布时间】:2016-01-12 03:07:29
【问题描述】:

想象一个机器学习问题,其中有 20 个类和大约 7000 个稀疏布尔特征。

我想弄清楚每个班级的 20 个最独特的功能是什么。换句话说,在特定类中使用较多但在其他类中未使用或很少使用的功能。

什么是可以做到这一点的好的特征选择算法或启发式算法?

【问题讨论】:

    标签: machine-learning feature-selection


    【解决方案1】:

    随机森林和朴素贝叶斯应该能够为您处理这个问题。鉴于稀疏性,我会先选择朴素贝叶斯。如果您正在寻找组合,随机森林会更好。

    【讨论】:

    • 迂腐的花言巧语:您正在寻找“独特”的功能。没有“最独特”这样的东西:“独特”这个词的意思是只有一个,所以没有唯一性的程度。
    • 我很清楚朴素贝叶斯在预测分类器方面的作用。但我不熟悉使用朴素贝叶斯作为特征选择器。我目前正在使用 chi^2 但这只是给了我所有功能的排名,而不是每个班级。我会看看随机森林。谢谢
    【解决方案2】:

    当您训练逻辑回归多类分类器时,训练模型是一个 num_class x num_feature 矩阵,称为模型,其中 [i,j] 值是第 i 类中特征 j 的权重。特征的索引与您的输入特征矩阵相同。

    在 scikit-learn 中,您可以访问模型的参数 如果您使用 scikit-learn 分类算法,您将能够通过以下方式找到每个类最重要的特征:

    clf = SGDClassifier(loss='log', alpha=regul, penalty='l1', l1_ratio=0.9, learning_rate='optimal', n_iter=10, shuffle=False, n_jobs=3, fit_intercept=True)
    clf.fit(X_train, Y_train)
    for i in range(0, clf.coef_.shape[0]):
        top20_indices = np.argsort(clf.coef_[i])[-20:]
        print top20_indices
    

    clf.coef_ 是包含每个类中每个特征的权重的矩阵,因此 clf.coef_[0][2] 是第一类中第三个特征的权重。 如果您在构建特征矩阵时跟踪字典中每个特征的索引,其中 dic[id] = feature_name 您将能够使用该字典检索顶部特征的名称。

    更多信息请参考scikit-learn text classification example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-16
      • 2021-04-11
      • 2018-03-16
      • 2019-09-01
      • 2016-05-16
      • 2019-04-25
      • 2014-02-25
      • 2019-06-09
      相关资源
      最近更新 更多