我正在尝试复制example,我想知道是否有一种方法可以通过Python Shap包实现这一点。我不知道如何使用LinearExplainer()
来获得RSquared的边际贡献
到目前为止,我所尝试的:
import sklearn
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
import shap
shap.initjs()
X = pd.DataFrame(columns=['x1','x2','x3'], data=[[7,3,6],[9,4,8],[12,5,9],[10,8,12],[20,9,23]])
Y = pd.Series(data=[23,45,68,59,89],name='y')
model = sklearn.linear_model.LinearRegression()
model.fit(X, Y)
explainer = shap.LinearExplainer(model, X)
shap_values = explainer.shap_values(X)
shap_values
的输出为:
array([[-40.0032057 , -23.7588602 , 33.24345503],
[-22.61050757, -15.27355298, 21.37079252],
[ 3.47853963, -6.78824577, 15.43446126],
[-13.9141585 , 18.66767587, -2.3745325 ],
[ 73.04933215, 27.15298308, -67.67417631]])
还有人能帮我理解/解释这个输出吗
提前谢谢
我假设你已经熟悉SHAPely价值观如何运作的理论方面。我发现this和this链接有助于实现这一目的
关于输出:
为了正确解释,首先让我使用您的模型生成预测,如下所示:
数据中有3个特性
x1,x2,x3
。对于每个数据点,我们得到一组3个shapely值。这些值表示3个特征中的每个特征如何线性影响预测。 现在考虑第一个预测值,即26.28。相应的SHApely值为:[-40.0032057 , -23.7588602 , 33.24345503]
这些值表示x1对预测的影响程度(-40.003)、x2对预测的影响程度(-23.758)和x3对预测的影响程度(33.243)。因此我们可以得出结论,x1和x2对预测有负面影响,x3对预测有正面影响
要进一步验证这一点,请获取预期值,如下所示:
这个期望值只是预测的平均值
这表明如果不知道x1,x2,x3的值,我们会猜到56.8 SHAPely值
[-40.0032057 , -23.7588602 , 33.24345503]
将此猜测推为:56.8 + (-40.0032057) + (-23.7588602) + 33.24345503 = 26.28138914
,这是我们最后的预测。因此,重新迭代SHAPely值表示每个特征对预测的线性影响程度偏离平均值(猜测)您可以通过以下方式进一步验证:
在这里,我为每一行取shap值,并将其添加到平均值中,这将导致对该行的预测。这与我们的预测是一样的。我希望这有助于你对如何解释SHAPely价值观有一个直观的理解
相关问题 更多 >
编程相关推荐