标签: shap

掩蔽者在 SHAP 包中真正做了什么并让他们适合训练或测试?

我一直在尝试使用这个shap包。我想从我的逻辑回归模型中确定形状值。与 相反TreeExplainerLinearExplainer需要所谓的掩蔽器。这个掩码器到底有什么作用,独立掩码器和分区掩码器有什么区别?

另外,我对测试集中的重要功能很感兴趣。然后我是否将掩蔽器安装在训练集或测试集上?下面您可以看到一段代码。

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)

python machine-learning logistic-regression shap

11
推荐指数
1
解决办法
7554
查看次数

Shap - 颜色条不显示在摘要图中

显示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)

在这种情况下,会显示颜色条,但它很小。我选择这样的例子是为了方便检索数据。

python matplotlib shap

11
推荐指数
1
解决办法
8204
查看次数

PyTorch 加载“\lib\site-packages\torch\lib\shm.dll”或其依赖项之一时出错

我无法使用 PyTorch 和 Shap 出现此错误

PyTorch Error loading  "\lib\site-packages\torch\lib\shm.dll" or one of its dependencies.
Run Code Online (Sandbox Code Playgroud)

我努力了

  • 卸载并重新安装PyTorch,失败
  • 创建一个新的 conda 环境并重新安装包括 PyTorch 在内的所有内容,失败
  • 按照其他帖子中的建议安装 .NET C++,但它已经安装了

我不是 SO 和依赖项方面的专家,但我觉得奇怪的是没有一个简单的方法来修复它。任何想法?

python conda pytorch shap

11
推荐指数
1
解决办法
1万
查看次数

如何使用 Pipeline 将 SHAP 与 sklearn 的线性 SVC 模型结合使用?

我正在使用 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)

pipeline svc scikit-learn text-classification shap

9
推荐指数
1
解决办法
9360
查看次数

如何将绘图(由 shap_values 生成)保存为 png?

我使用 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?

plot png save python-3.x shap

9
推荐指数
1
解决办法
9404
查看次数

使用 DeepExplainer 时,Python 中的 SHAP 是否支持 Keras 或 TensorFlow 模型?

我目前正在使用 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)

python deep-learning keras tensorflow shap

9
推荐指数
1
解决办法
4698
查看次数

SHAP 函数在绘图方法中引发异常

Samples.zip 示例压缩文件夹包含:

  1. 模型.pkl
  2. x_test.csv

要重现问题,请执行以下步骤:

  1. 用于lin2 =joblib.load('model.pkl')加载线性回归模型
  2. 用于x_test_2 = pd.read_csv('x_test.csv').drop(['Unnamed: 0'],axis=1)加载x_test_2
  3. 运行下面的代码来加载解释器
explainer_test = shap.Explainer(lin2.predict, x_test_2)
shap_values_test = explainer_test(x_test_2)
Run Code Online (Sandbox Code Playgroud)
  1. 然后运行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)
  1. 运行另一个函数来绘制瀑布图以查看错误消息:

例外: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)

问题:

  1. 为什么我不能运行partial_dependence_plot& shap.plots.waterfall
  2. 我需要对输入进行哪些更改才能运行上述方法?

python plot machine-learning shap

9
推荐指数
1
解决办法
5100
查看次数

为 tidymodel 对象创建 SHAP 图

这个问题指的是在 R 中使用 tidymodels 获取 catboost 模型的摘要形状图。鉴于问题下方的评论,OP 找到了解决方案,但到目前为止尚未与社区分享。

我想分析我的带有tidymodelsSHAP 值图的软件包的树整体,例如单个观测值的图,例如

ttps://prnt.sc/CO_PC4aDUQA0

并总结我的数据集所有特征的影响,例如

在此输入图像描述

DALEXtra 提供为 tidymodels 创建 SHAP 值的函数explain.tidymodels()force_plotfastshap包为底层 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)

plot tidymodels shap dalex

9
推荐指数
1
解决办法
2083
查看次数

SHAP DeepExplainer 出现 TensorFlow 2.4+ 错误

我尝试使用 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)

python keras tensorflow tf.keras shap

8
推荐指数
1
解决办法
1万
查看次数

生成 shap 值后使用 shap.plots.waterfall 时出现错误

对于下面给出的代码,如果我只使用命令,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)

waterfall python-3.x shap

8
推荐指数
1
解决办法
7222
查看次数