从 scikit-learn 中的 LinearSVC 中获取最具选择性的特征以进行多类预测

问题描述

我有一个包含约 13k 个特征的数据集,我想选择对特定标签分类贡献最大的特征。

我在单个单元格数据上使用 sklearn.svm.LinearSVC 类。

coef_ 属性应提供此信息(据我所知),但是当从 coef_ 中排除前 10-100 个特征时,准确率/多类 f1 分数不会降低。 >

有人知道如何根据训练好的模型提取这些信息吗?

我在下面提供了示例代码,它们的作用相同,但使用的是开源数据集!

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np


data = load_iris(return_X_y=True,as_frame=True)

print(data[1].unique()) #  [0 1 2] -> three classes

svc = LinearSVC()

svc.fit(data[0],data[1])

score = svc.score(data[0],data[1])

print(svc.coef_.shape)  # (3,4)
fig,axs = plt.subplots(1,3,figsize=(15,7))
for label,ax in enumerate(axs.flatten()):
    args = np.argsort(-svc.coef_[label])
    vals = [svc.coef_[label][arg] for arg in args]
    ax.bar(args,vals)

    ax.title.set_text(f"{label}")

plt.tight_layout()



if __name__ == '__main__':
    plt.show()

Output plot of the code

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...