确定每个班级最重要的功能

时间:2015-10-14 06:45:42

标签: machine-learning feature-selection

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

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

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

2 个答案:

答案 0 :(得分:3)

当您训练Logistic回归多类分类器时,列车模型是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

答案 1 :(得分:0)

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