python - 如何解释 sklearn.feature_selection 中多类的 _coeffs 输出的特征的重要性?
问题描述
我有一个包含 150 个样本和近 10000 个特征的数据集。我将样本分为 6 个集群。我使用sklearn.feature_selection.RFECV方法来减少特征数量。该方法使用10 倍 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)的数组。我可以对这些进行排序并得到我想要的结果。但我不确定它是否正确和有意义。我非常感谢任何其他解决方案。
解决方案
好吧,我深入研究了源代码。在这里我发现,实际上他们在做几乎相同的事情:
# Get ranks
if coefs.ndim > 1:
ranks = np.argsort(safe_sqr(coefs).sum(axis=0))
else:
ranks = np.argsort(safe_sqr(coefs))
如果是多类问题,他们将系数相加。希望对其他人有所帮助。
推荐阅读
- c - 在asm中将两个数字相加
- c# - 基于另一个表值 MVC ASP.NET 在表上打印数据
- machine-learning - Keras 是否有可能实现无监督数据增强 (UDA) 的一致性损失?
- javascript - 如何将元素从外部移动/拖动到 iframe
- r - 在 R 中匹配“中间”数据帧值
- javascript - 如何正确设置 CORS 设置
- flask - 使用 Jinja2 创建 csv 文件
- python - Flask-Mail 显示 socket.gaierror: [Errno 11001] getaddrinfo failed
- spring - 在 freemarker 列表中设置开始索引
- arrays - 如何在 Angular JS 中拼接具有空属性的对象?