Shap value dimensions are different for RandomForest and XGB whyhow? 有什么办法可以解决这个问题吗?

问题描述 投票:0回答:1

从树的解释者那里返回的SHAP值。.shap_values(some_data) 给XGB和随机森林不同的尺寸结果。我试着去研究它,但似乎找不到原因或方法,或者在任何Slundberg (SHAP老兄的)教程中的解释。 所以。

  • 有什么原因是我所遗漏的吗?
  • 是否有一些标志,返回shap值fro XGB每个类像其他模型,这是不明显的或我错过了?

下面是一些示例代码

import xgboost.sklearn as xgb
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import shap

bc = load_breast_cancer()
cancer_df = pd.DataFrame(bc['data'], columns=bc['feature_names'])
cancer_df['target'] = bc['target']
cancer_df = cancer_df.iloc[0:50, :]
target = cancer_df['target']
cancer_df.drop(['target'], inplace=True, axis=1)

X_train, X_test, y_train, y_test = train_test_split(cancer_df, target, test_size=0.33, random_state = 42)

xg = xgb.XGBClassifier()
xg.fit(X_train, y_train)
rf = RandomForestClassifier()
rf.fit(X_train, y_train)

xg_pred = xg.predict(X_test)
rf_pred = rf.predict(X_test)

rf_explainer = shap.TreeExplainer(rf, X_train)
xg_explainer = shap.TreeExplainer(xg, X_train)

rf_vals = rf_explainer.shap_values(X_train)
xg_vals = xg_explainer.shap_values(X_train)

print('Random Forest')
print(type(rf_vals))
print(type(rf_vals[0]))
print(rf_vals[0].shape)
print(rf_vals[1].shape)

print('XGBoost')
print(type(xg_vals))
print(xg_vals.shape)

输出。

Random Forest
<class 'list'>
<class 'numpy.ndarray'>
(33, 30)
(33, 30)
XGBoost
<class 'numpy.ndarray'>
(33, 30)

任何想法都是有帮助的! 谢谢!

python scikit-learn random-forest shap xgbclassifier
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.