【发布时间】:2016-01-12 03:07:29
【问题描述】:
想象一个机器学习问题,其中有 20 个类和大约 7000 个稀疏布尔特征。
我想弄清楚每个班级的 20 个最独特的功能是什么。换句话说,在特定类中使用较多但在其他类中未使用或很少使用的功能。
什么是可以做到这一点的好的特征选择算法或启发式算法?
【问题讨论】:
标签: machine-learning feature-selection
想象一个机器学习问题,其中有 20 个类和大约 7000 个稀疏布尔特征。
我想弄清楚每个班级的 20 个最独特的功能是什么。换句话说,在特定类中使用较多但在其他类中未使用或很少使用的功能。
什么是可以做到这一点的好的特征选择算法或启发式算法?
【问题讨论】:
标签: machine-learning feature-selection
随机森林和朴素贝叶斯应该能够为您处理这个问题。鉴于稀疏性,我会先选择朴素贝叶斯。如果您正在寻找组合,随机森林会更好。
【讨论】:
当您训练逻辑回归多类分类器时,训练模型是一个 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 您将能够使用该字典检索顶部特征的名称。
【讨论】: