`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
而不是 prefit
或 None
的情况。我为我的应用程序使用 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_importances
(https://github.com/TeamHG-Memex/eli5/blob/master/eli5/sklearn/permutation_importance.py#L209)的SD,而feature_importances_
是上面[=22]的平均值=](非洗牌得分减去(-)洗牌得分)。
无论 cv
参数的设置如何,对您的原始问题的回答都比较短,eli5 将计算您提供的得分手的平均减少量。因为您使用的是 sklearn 包装器,所以记分器将来自 scikit-learn:在您的例子中是 accuracy。总的来说,作为一个关于包的词,其中一些细节在不深入源代码的情况下特别难以弄清楚,可能值得尝试提交拉取请求以使文档尽可能详细。
我使用 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
而不是 prefit
或 None
的情况。我为我的应用程序使用 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_importances
(https://github.com/TeamHG-Memex/eli5/blob/master/eli5/sklearn/permutation_importance.py#L209)的SD,而feature_importances_
是上面[=22]的平均值=](非洗牌得分减去(-)洗牌得分)。
无论 cv
参数的设置如何,对您的原始问题的回答都比较短,eli5 将计算您提供的得分手的平均减少量。因为您使用的是 sklearn 包装器,所以记分器将来自 scikit-learn:在您的例子中是 accuracy。总的来说,作为一个关于包的词,其中一些细节在不深入源代码的情况下特别难以弄清楚,可能值得尝试提交拉取请求以使文档尽可能详细。