我已经在数据集上使用KNN分类器尝试了我的模型,我想知道模型中最重要的特征是什么,以及预测中最重要的特征是什么。
回答:
为了获得关于哪个特征对分类影响更大的定性见解,你可以一次使用一个特征进行n_feats
次分类(n_feats
代表特征向量的维度),如下所示:
import numpy as npfrom sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import cross_val_scoreiris = datasets.load_iris()clf = KNeighborsClassifier()y = iris.targetn_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 Accuracy0 0.6924021 0.5183822 0.953843 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 Accuracy0 0.9738561 0.967322 0.9468953 0.959967
从这些结果中可以清楚地看出,当你去掉第三个特征(索引为2的特征)时,分类器的准确率最差,这与通过第一种方法获得的结果是一致的。