如何在任何分类器Sklearn中获得最大的贡献功能,例如DecisionTreeClassifier knn等



我已经使用 KNN 分类器在数据集上尝试了我的模型,我想知道模型中哪个是贡献最大的特征,也是预测中贡献最大的特征。

要定性地了解哪个特征对分类的影响更大,您可以一次使用一个特征(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 的特征(时,分类器产生的精度最差,这与通过第一种方法获得的结果一致。

相关内容

最新更新