我有一个包含 150 个样本和近 10000 个特征的数据集。我将样本聚集在 6 个集群中。我用过sklearn.feature_selection。RFECV方法减少了特征的数量。该方法使用10倍CV估计3000个特征的重要特征的数量,精度为~95%。但是,我可以使用大约 92 个特征获得 ~ 250% 的准确度(我使用grid_scores_绘制)。因此,我想获得这 250 个功能。
我已经检查了这个问题 在RFECV scikit-learn中获取特征 并发现通过以下方式计算所选特征的重要性:
np.absolute(rfecv.estimator_.coef_)
它返回二元分类的重要特征数量的数组长度。正如我之前指出的,我有 6 个集群和sklearn.feature_selection。RFECV进行分类 1与 1。因此,我得到了(15, 3000)
。我不知道如何进行。我想像这样为每个功能取点积:
cofs = rfecv.estimator_.coef_
coeffs = []
for x in range(cofs.shape[1]):
vec = cofs[ : , x]
weight = vec.transpose() @ vec
coeffs.append(weight)
我得到(1,3000)的数组。我可以对这些进行排序并获得我想要的结果。 但我不确定这是否正确和有意义。我非常感谢任何其他解决方案。
好吧,我深入研究了源代码。在这里,我发现,实际上他们正在做几乎相同的事情:
# Get ranks
if coefs.ndim > 1:
ranks = np.argsort(safe_sqr(coefs).sum(axis=0))
else:
ranks = np.argsort(safe_sqr(coefs))
如果是多类问题,他们会对系数求和。希望能帮助他人。