我一直在尝试使用这个shap
包。我想从我的逻辑回归模型中确定形状值。与 相反TreeExplainer
,LinearExplainer
需要所谓的掩蔽器。这个掩码器到底有什么作用,独立掩码器和分区掩码器有什么区别?
另外,我对测试集中的重要功能很感兴趣。然后我是否将掩蔽器安装在训练集或测试集上?下面您可以看到一段代码。
model = LogisticRegression(random_state = 1)
model.fit(X_train, y_train)
masker = shap.maskers.Independent(data = X_train)
**or**
masker = shap.maskers.Independent(data = X_test)
explainer = shap.LinearExplainer(model, masker = masker)
shap_val = explainer(X_test)```
Run Code Online (Sandbox Code Playgroud) 显示summary_plot时,不显示颜色条。
shap.summary_plot(shap_values, X_train)
Run Code Online (Sandbox Code Playgroud)
我尝试过改变plot_size。当绘图较高时,会出现颜色条,但它非常小 - 看起来不应该。
shap.summary_plot(shap_values, X_train, plot_size=0.7)
Run Code Online (Sandbox Code Playgroud)
这是一个看起来正确的颜色条的示例。
有谁知道这是否可以以某种方式解决?
如何重现:
import pandas as pd
import shap
import sklearn
from sklearn.ensemble import RandomForestRegressor
# a classic housing price dataset
X,y = shap.datasets.boston()
# a simple linear model
model = RandomForestRegressor(max_depth=6, random_state=0, n_estimators=10)
model.fit(X, y)
shap_values = shap.TreeExplainer(model).shap_values(X)
shap.summary_plot(shap_values, X)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,会显示颜色条,但它很小。我选择这样的例子是为了方便检索数据。
我无法使用 PyTorch 和 Shap 出现此错误
PyTorch Error loading "\lib\site-packages\torch\lib\shm.dll" or one of its dependencies.
Run Code Online (Sandbox Code Playgroud)
我努力了
我不是 SO 和依赖项方面的专家,但我觉得奇怪的是没有一个简单的方法来修复它。任何想法?
我正在使用 sklearn 的线性 SVC 模型进行文本分类。现在我想使用 SHAP ( https://github.com/slundberg/shap )可视化哪些单词/标记对分类决策影响最大。
现在这不起作用,因为我收到一个错误,该错误似乎源自我定义的管道中的矢量化步骤 - 这里出了什么问题?
我在这种情况下使用 SHAP 的一般方法是否正确?
x_Train, x_Test, y_Train, y_Test = train_test_split(df_all['PDFText'], df_all['class'], test_size = 0.2, random_state = 1234)
pipeline = Pipeline([
(
'tfidv',
TfidfVectorizer(
ngram_range=(1,3),
analyzer='word',
strip_accents = ascii,
use_idf = True,
sublinear_tf=True,
max_features=6000,
min_df=2,
max_df=1.0
)
),
(
'lin_svc',
svm.SVC(
C=1.0,
probability=True,
kernel='linear'
)
)
])
pipeline.fit(x_Train, y_Train)
shap.initjs()
explainer = shap.KernelExplainer(pipeline.predict_proba, x_Train)
shap_values = explainer.shap_values(x_Test, nsamples=100)
shap.force_plot(explainer.expected_value[0], shap_values[0][0,:], x_Test.iloc[0,:])
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息:
Provided model function fails when applied to …
Run Code Online (Sandbox Code Playgroud) 我使用 Shap 库来可视化变量重要性。
我尝试将 shap_summary_plot 保存为“png”图像,但我的 image.png 但他们得到一个空图像
这是我使用过的代码:
shap_values = shap.TreeExplainer(modelo).shap_values(X_train)
shap.summary_plot(shap_values, X_train, plot_type="bar")
plt.savefig('grafico.png')
Run Code Online (Sandbox Code Playgroud)
代码有效,但保存的图像是空的。
如何将绘图保存为 image.png?
我目前正在使用 SHAP 包来确定功能贡献。我已经将这种方法用于 XGBoost 和 RandomForest,而且效果非常好。由于我正在处理的数据是顺序数据,我尝试使用 LSTM 和 CNN 来训练模型,然后使用 SHAP 获得特征重要性DeepExplainer
;但它不断抛出错误。我得到的错误是:
AssertionError: <class 'keras.callbacks.History'> is not currently a supported model type!.
Run Code Online (Sandbox Code Playgroud)
我也附上了示例代码(LSTM)。如果有人可以帮助我,那将会很有帮助。
shap.initjs()
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(X.shape[1],X.shape[2]), return_sequences=True))
model.add(LSTM(n_neurons, return_sequences=False))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
h=model.fit(X, y, epochs=nb_epochs, batch_size=n_batch, verbose=1, shuffle=True)
background = X[np.random.choice(X.shape[0],100, replace=False)]
explainer = shap.DeepExplainer(h,background)
Run Code Online (Sandbox Code Playgroud) Samples.zip 示例压缩文件夹包含:
要重现问题,请执行以下步骤:
lin2 =joblib.load('model.pkl')
加载线性回归模型x_test_2 = pd.read_csv('x_test.csv').drop(['Unnamed: 0'],axis=1)
加载x_test_2
explainer_test = shap.Explainer(lin2.predict, x_test_2)
shap_values_test = explainer_test(x_test_2)
Run Code Online (Sandbox Code Playgroud)
partial_dependence_plot
查看错误信息:ValueError:x 和 y 不能大于二维,但具有形状 (2,) 和 (2, 1, 1)
sample_ind = 3
shap.partial_dependence_plot(
"new_personal_projection_delta",
lin.predict,
x_test, model_expected_value=True,
feature_expected_value=True, ice=False,
shap_values=shap_values_test[sample_ind:sample_ind+1,:]
)
Run Code Online (Sandbox Code Playgroud)
例外:waterfall_plot 需要模型输出的标量 base_values 作为第一个参数,但您已传递一个数组作为第一个参数!尝试 shap.waterfall_plot(explainer.base_values[0], value[0], X[0]) 或对于多输出模型尝试 shap.waterfall_plot(explainer.base_values[0], value[0][0], X[ 0])。
shap.plots.waterfall(shap_values_test[sample_ind], max_display=14)
partial_dependence_plot
& shap.plots.waterfall
?这个问题指的是在 R 中使用 tidymodels 获取 catboost 模型的摘要形状图。鉴于问题下方的评论,OP 找到了解决方案,但到目前为止尚未与社区分享。
我想分析我的带有tidymodels
SHAP 值图的软件包的树整体,例如单个观测值的图,例如
并总结我的数据集所有特征的影响,例如
DALEXtra
提供为 tidymodels 创建 SHAP 值的函数explain.tidymodels()
。 force_plot
该fastshap
包为底层 python 包的绘图函数提供了一个包装器SHAP
。但我无法理解如何使该函数与函数的输出一起工作explain.tidymodels()
。
问题:如何在 R 中使用tidymodels
和生成这样的 SHAP 图explain.tidymodels
?
MWE(对于带有 的 SHAP 值explain.tidymodels
)
library(MASS)
library(tidyverse)
library(tidymodels)
library(parsnip)
library(treesnip)
library(catboost)
library(fastshap)
library(DALEXtra)
set.seed(1337)
rec <- recipe(crim ~ ., data = Boston)
split <- initial_split(Boston)
train_data <- training(split)
test_data <- testing(split) %>% dplyr::select(-crim) %>% as.matrix()
model_default<-
parsnip::boost_tree( …
Run Code Online (Sandbox Code Playgroud) 我尝试使用 DeepExplainer 计算 shap 值,但出现以下错误:
不再支持 keras,请改用 tf.keras
即使我使用 tf.keras?
KeyError Traceback(最近一次调用最后一次) 在 6 # ...或者直接传递张量 7 解释器 = shap.DeepExplainer((model.layers[0].input, model.layers[-1].output), 背景) 8 shap_values = 解释器.shap_values(X_test[1:5]) C:\ProgramData\Anaconda3\lib\site-packages\shap\explainers\_deep\__init__.py in shap_values(self、X、ranked_outputs、output_rank_order、check_additivity) 122 人被选为“顶级”。 [第 124 章] C:\ProgramData\Anaconda3\lib\site-packages\shap\explainers\_deep\deep_tf.py 在 shap_values(self、X、ranked_outputs、output_rank_order、check_additivity) [第 310 章] [第 311 章] [第 312 章] 313 第314章 C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py 中 __getitem__(self, key) 第2798章 第2799章 第2800章 第2801章 第2802章 get_loc 中的 C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py(self、key、method、tolerance) 第2646章 第2647章 第2648章 第2649章 第2650章 pandas\_libs\index.pyx 在 pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index.pyx 在 pandas._libs.index.IndexEngine.get_loc() pandas\_libs\hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item() pandas\_libs\hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item() 密钥错误:0
import shap …
Run Code Online (Sandbox Code Playgroud) 对于下面给出的代码,如果我只使用命令,shap.plots.waterfall(shap_values[6])
我会收到错误
“numpy.ndarray”对象没有属性“base_values”
我必须首先运行这两个命令:
explainer2 = shap.Explainer(clf.best_estimator_.predict, X_train)
shap_values = explainer2(X_train)
Run Code Online (Sandbox Code Playgroud)
然后运行waterfall
命令以获得正确的绘图。下面是发生错误的示例:
from sklearn.datasets import make_classification
import seaborn as sns
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import pickle
import joblib
import warnings
import shap
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV, GridSearchCV
f, (ax1,ax2) = plt.subplots(nrows=1, ncols=2,figsize=(20,8))
# Generate noisy Data
X_train,y_train = make_classification(n_samples=1000,
n_features=50,
n_informative=9,
n_redundant=0,
n_repeated=0,
n_classes=10,
n_clusters_per_class=1,
class_sep=9,
flip_y=0.2,
#weights=[0.5,0.5],
random_state=17)
X_test,y_test = make_classification(n_samples=500,
n_features=50, …
Run Code Online (Sandbox Code Playgroud) shap ×10
python ×6
plot ×3
keras ×2
python-3.x ×2
tensorflow ×2
conda ×1
dalex ×1
matplotlib ×1
pipeline ×1
png ×1
pytorch ×1
save ×1
scikit-learn ×1
svc ×1
tf.keras ×1
tidymodels ×1
waterfall ×1