我有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)的数组。我可以对这些进行排序,并得到想要的结果。 但是我不确定这是否正确并有意义。我真的很感谢其他解决方案。
答案 0 :(得分:0)
我深入研究了源代码。在这里,我发现,实际上他们在做几乎相同的事情:
# Get ranks
if coefs.ndim > 1:
ranks = np.argsort(safe_sqr(coefs).sum(axis=0))
else:
ranks = np.argsort(safe_sqr(coefs))
如果是多类问题,它们将系数相加。希望对别人有帮助。