确定 sklearn 中 SVM 分类器最有贡献的特征

新手上路,请多包涵

我有一个数据集,我想根据该数据训练我的模型。训练后,我需要知道在 SVM 分类器的分类中起主要作用的特征。

森林算法有一个叫做特征重要性的东西,有没有类似的东西?

原文由 Jibin Mathew 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 771
2 个回答

是的,有属性 coef_ 用于 SVM 分类器,但它仅适用于 SVM with linear kernel 。对于其他内核,这是不可能的,因为数据是由内核方法转换到另一个与输入空间无关的空间,请查看 解释

 from matplotlib import pyplot as plt
from sklearn import svm

def f_importances(coef, names):
    imp = coef
    imp,names = zip(*sorted(zip(imp,names)))
    plt.barh(range(len(names)), imp, align='center')
    plt.yticks(range(len(names)), names)
    plt.show()

features_names = ['input1', 'input2']
svm = svm.SVC(kernel='linear')
svm.fit(X, Y)
f_importances(svm.coef_, features_names)

该函数的输出如下所示: 特征重要性

原文由 Jakub Macina 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 rbf (径向基函数)内核,则可以使用 sklearn.inspection.permutation_importance 来获取特征重要性。 [文档]

 from sklearn.inspection import permutation_importance
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

svc =  SVC(kernel='rbf', C=2)
svc.fit(X_train, y_train)

perm_importance = permutation_importance(svc, X_test, y_test)

feature_names = ['feature1', 'feature2', 'feature3', ...... ]
features = np.array(feature_names)

sorted_idx = perm_importance.importances_mean.argsort()
plt.barh(features[sorted_idx], perm_importance.importances_mean[sorted_idx])
plt.xlabel("Permutation Importance")

在此处输入图像描述

原文由 Nishan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏