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

时间:2019-06-04 16:23:56

标签: python scikit-learn svm multiclass-classification rfe

我有150个样本和近10000个特征的数据集。我将样本分为6个类。我使用了 sklearn.feature_selection.RFECV 方法来减少功能数量。该方法使用 10倍CV 估计约95%的准确性的3000个重要特征的数量。但是,使用大约250个功能(我使用 grid_scores _ 进行了绘图),我可以获得〜92%的精度。因此,我想获得250个功能。

我已经检查了问题Getting features in RFECV scikit-learn,发现可以通过以下方式计算所选功能的重要性:

  

np.absolute(rfecv.estimator_.coef _)

返回二进制分类的重要特征数的数组长度。正如我之前指出的,我有6个群集,并且 sklearn.feature_selection.RFECV 1对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 个答案:

答案 0 :(得分:0)

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

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

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