如何解释 sklearn.feature_selection 中多类的 _coeffs 输出的特征的重要性?

Posted

技术标签:

【中文标题】如何解释 sklearn.feature_selection 中多类的 _coeffs 输出的特征的重要性?【英文标题】:How to interpret importance of features from _coeffs outputs for multi-class in sklearn.feature_selection? 【发布时间】:2019-10-20 05:12:21 【问题描述】:

我有一个包含 150 个样本和近 10000 个特征的数据集。我将样本分为 6 个集群。我使用 sklearn.feature_selection.RFECV 方法来减少特征数量。该方法使用 10-fold CV 估计重要特征的数量 3000 个特征,准确率约为 95%。但是,我可以使用大约 250 个特征(我使用 grid_scores_ 绘制)获得约 92% 的准确度。因此,我想获得这 250 个功能。

我检查了那个问题Getting features in RFECV scikit-learn,发现通过以下方式计算所选特征的重要性:

np.absolute(rfecv.estimator_.coef_)

它返回二进制分类的重要特征数量的数组长度。如前所述,我有 6 个集群,sklearn.feature_selection.RFECV 进行分类1 vs 1。因此我得到(15, 3000)ndarray。我不知道该怎么做。我正在考虑为每个功能采用点积:

cofs = rfecv.estimator_.coef_

coeffs = []

for x in range(cofs.shape[1]):

    vec = cofs[ : , x]

    weight = vec.transpose() @ vec 

    coeffs.append(weight)

我得到 (1,3000) 的数组。我可以对这些进行排序并得到我想要的结果。 但我不确定它是否正确和有意义。我非常感谢任何其他解决方案。

【问题讨论】:

【参考方案1】:

好吧,我深入研究了源代码。我在这里发现,实际上他们在做几乎相同的事情:

# Get ranks
if coefs.ndim > 1:
    ranks = np.argsort(safe_sqr(coefs).sum(axis=0))
else:
    ranks = np.argsort(safe_sqr(coefs))

如果是多类问题,他们将系数相加。希望对其他人有所帮助。

【讨论】:

以上是关于如何解释 sklearn.feature_selection 中多类的 _coeffs 输出的特征的重要性?的主要内容,如果未能解决你的问题,请参考以下文章

如何解释箱线图?

将 json 解释为字符串,如何将其解释为 json? [复制]

代码案例详解!如何让机器学习模型自解释!⛵

如何解释 TensorFlow 输出?

如何解释 LDA 组件(使用 sklearn)?

JAVA 里面如何 使用jni 给个例子 加 解释。谢谢