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

时间:2017-02-07 11:11:05

标签: python machine-learning scikit-learn knn

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

1 个答案:

答案 0 :(得分:3)

要获得对哪个功能对分类产生更大影响的定性分析,您可以一次使用一个功能执行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)
    print('%d        %g' % (i, scores.mean()))

输出

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 -th分类中使用的特征向量由所有特征组成,但 i -th。

示例运行

Feature  Accuracy
0        0.973856
1        0.96732
2        0.946895
3        0.959967

从这些结果中可以清楚地看出,当你摆脱第二个特征时,分类器会产生最差的精度,这与第一个方法得到的结果一致。