`eli5.show_weights` 究竟为分类模型显示了什么?

What exactly does `eli5.show_weights` display for a classification model?

我使用 eli5 来应用特征重要性的排列过程。 documentation中有一些解释和一个小例子,但不是很清楚。

我正在使用 sklearn SVC 模型解决分类问题。

我的问题是:这些权重是打乱特定特征时准确率的变化(decrease/increase)还是这些特征的 SVC 权重?

this medium article 中,作者指出这些值显示 模型性能因重新调整该特征而降低。 但不确定是否确实如此。

小例子:

from sklearn import datasets
import eli5
from eli5.sklearn import PermutationImportance
from sklearn.svm import SVC, SVR

# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target

clf = SVC(kernel='linear')
perms = PermutationImportance(clf, n_iter=1000, cv=10, scoring='accuracy').fit(X, y)

print(perms.feature_importances_)
print(perms.feature_importances_std_)

[0.38117333 0.16214   ]
[0.1349115  0.11182505]

eli5.show_weights(perms)

我做了一些深入的研究。 在查看源代码后,我相信使用 cv 而不是 prefitNone 的情况。我为我的应用程序使用 K-Folds 方案。因此,我也使用 SVC 模型,score 是这种情况下的准确性。

通过查看 PermutationImportance 对象的 fit 方法,可以计算出 _cv_scores_importances (https://github.com/TeamHG-Memex/eli5/blob/master/eli5/sklearn/permutation_importance.py#L202)。使用指定的交叉验证方案,并使用测试数据返回 base_scores, feature_importances(函数:_cv_scores_importances 内的 _get_score_importances)。

通过查看 get_score_importances 函数 (https://github.com/TeamHG-Memex/eli5/blob/master/eli5/permutation_importance.py#L55), we can see that base_score is the score on the non shuffled data and feature_importances (called differently there as: scores_decreases) are defined as non shuffled score - shuffled score (see https://github.com/TeamHG-Memex/eli5/blob/master/eli5/permutation_importance.py#L93)

最后,误差(feature_importances_std_)是上面feature_importanceshttps://github.com/TeamHG-Memex/eli5/blob/master/eli5/sklearn/permutation_importance.py#L209)的SD,而feature_importances_是上面[=22]的平均值=](非洗牌得分减去(-)洗牌得分)。

无论 cv 参数的设置如何,对您的原始问题的回答都比较短,eli5 将计算您提供的得分手的平均减少量。因为您使用的是 sklearn 包装器,所以记分器将来自 scikit-learn:在您的例子中是 accuracy。总的来说,作为一个关于包的词,其中一些细节在不深入源代码的情况下特别难以弄清楚,可能值得尝试提交拉取请求以使文档尽可能详细。