如何在任何分类器中获得最具贡献的特征,例如Sklearn中的DecisionTreeClassifier和knn等。

4

我已经使用KNN分类器在一个数据集上尝试了我的模型,我想知道模型中最有贡献的特征是什么,以及预测中最有贡献的特征是什么。

1个回答

5
为了深入了解哪个特征对分类影响更大,您可以执行n_feats次分类,每次只使用一个特征进行分类(n_feats代表特征向量维度),例如:
import numpy as np
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score

iris = datasets.load_iris()

clf = KNeighborsClassifier()

y =  iris.target
n_feats = iris.data.shape[1]

print('Feature  Accuracy')
for i in range(n_feats):
    X = iris.data[:, i].reshape(-1, 1)
    scores = cross_val_score(clf, X, y, cv=3)
    print(f'{i}        {scores.mean():g}')

输出:

Feature  Accuracy
0        0.692402
1        0.518382
2        0.95384
3        0.95384

这些结果表明分类主要由特征2和3决定。
您可以采用替代方法,通过将上述代码中的X = iris.data [:,i] .reshape(-1,1) 替换为:
    X_head = np.atleast_2d(iris.data[:, 0:i])
    X_tail = np.atleast_2d(iris.data[:, i+1:])
    X = np.hstack((X_head, X_tail))

在这种情况下,您也要执行n_samples次分类。不同之处在于,在第i次分类中使用的特征向量由所有特征组成,但是不包括第i个特征。 示例运行:
Feature  Accuracy
0        0.973856
1        0.96732
2        0.946895
3        0.959967

从这些结果中可以清楚地看出,当你去除第三个特征(索引为2的特征)时,分类器的准确性最差,这与通过第一种方法得到的结果一致。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接