确定每个类最重要的特征

Tim*_*Tim 0 machine-learning feature-selection

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

我想弄清楚每个类的 20 个最独特的功能是什么。换句话说,在特定类中经常使用但在其他类中未使用或几乎不使用的功能。

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

Ash*_*Ash 6

当您训练逻辑回归多类分类器时,训练模型是一个 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
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅scikit-learn 文本分类示例