模型特征重要性和SHAP概览图的区别

4
我一直在玩具数据集上尝试理解shap库和使用方法。我发现一个问题,即catboost回归模型的特征重要性与shap库中的summary_plot的特征重要性不同。
我正在分析X_train集上的model.feature_importances_的特征重要性以及X_test集上的shap explainer的summary plot。
以下是我的源代码 -
import catboost
from catboost import *
import shap
shap.initjs()
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

X,y = shap.datasets.boston()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

# Train Model
model = CatBoostRegressor(iterations=300, learning_rate=0.1, random_seed=123)
model.fit(X_train, y_train, verbose=False, plot=False)

# Compute feature importance dataframe
feat_imp_list = list(zip ( list(model.feature_importances_) , model.feature_names_) )
feature_imp_df = pd.DataFrame(sorted(feat_imp_list, key=lambda x: x[0], reverse=True) , columns = ['feature_value','feature_name'])
feature_imp_df

enter image description here

# Run shap explainer on X_test set
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

enter image description here

为什么在模型的特征重要性图中DIS排名第3,但在SHAP库的汇总图中排名第7?
1个回答

2
特征重要性总是正值,而SHAP值是附加到自变量的系数(可以是正数和负数)。
两者都按降序给出结果: - 在特征重要性中,您可以看到它从最大值开始下降到最小值。它们的总和必须在任何情况下都为100(即100%)。 - 对于SHAP值,它只是附加到该特定特征的系数。这也是按降序排列的(从最高系数到最低值)。在实数线上,它们的总和可以是任何值(对于任何情况)。
P.S. 您可以将这些SHAP系数与逻辑回归模型的系数进行比较,以便更好地理解。
干杯!

1
谢谢您的回答。我还有几个问题 - 您提到shap值是系数。关于此,1.) 我们如何查看每个特征的系数值?2.) 这些系数是如何计算的?是否有示例链接/博客文章可以查看? - Regressor
我正在删除这些链接。你可以看一下。
  1. 链接
  2. 链接
- Amit Kumar
我也对CatBoostRegressor的特征重要性和Shap之间的顺序差异感到困惑。如果有人能够详细说明这个问题,那将非常有趣。 - Henri
1
CatBoostRegressor的特征重要性 - 这个值表示特定特征的重要性。它不告诉你特征的弹性,而是告诉你在模型构建中的贡献,而shap值只是特征的弹性(可以是负/正),但特征重要性始终为正(总和=1,始终如一)。 - Amit Kumar
@Amit Kumar...很棒的答案。我谷歌搜索了几次,但直到偶然发现你的回答时才找到令人满意的答案。感谢您分享这个! - ASH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接