Python 使用SHAP:缩放每个模型的Shapley值,然后在模型之间求平均值,还是只添加每个模型的Shapley值?

Python 使用SHAP:缩放每个模型的Shapley值,然后在模型之间求平均值,还是只添加每个模型的Shapley值?,python,deep-learning,shap,shapley,Python,Deep Learning,Shap,Shapley,我在一个具有k个特性的Keras模型上运行了n个试验,之后我在每个试验中将SHAPs DeepExplainer应用于该模型。所有数据都是相同的,但在训练集和测试集之间是随机划分的。我试图找出组合模型输出的最佳方法,无论是直接为每个试验添加Shapley值,逐个特征,然后平均-还是首先缩放每个试验输出的Shapley值,然后添加它们并平均 我最初的想法是,由于“基线总是基于所有预测的平均值相对”(from),总体平均值会出现偏差,可能有更好的方法组合数据。尽管我想知道,尽管训练/测试分割中的样本

我在一个具有k个特性的Keras模型上运行了n个试验,之后我在每个试验中将SHAPs DeepExplainer应用于该模型。所有数据都是相同的,但在训练集和测试集之间是随机划分的。我试图找出组合模型输出的最佳方法,无论是直接为每个试验添加Shapley值,逐个特征,然后平均-还是首先缩放每个试验输出的Shapley值,然后添加它们并平均

我最初的想法是,由于“基线总是基于所有预测的平均值相对”(from),总体平均值会出现偏差,可能有更好的方法组合数据。尽管我想知道,尽管训练/测试分割中的样本不同,每个模型的相对“基线”也不同,但如果对多个模型进行平均,最终平均模型的解释值是否应与单个模型相同。应该是这样吗

然而,缩放每个模型的特征是否会带来任何好处:同样,从我可以(保留警告)缩放模型中单个观测值的特征Shapley值。这样看来,我应该能够在对所有观测值求和后,在每个箱子上缩放每个特征的Shapley值,这样每个特征的所有Shapley值总和为1。如果是这种情况,我可以通过模型内的特征进行缩放,我可以这样平均模型吗?我认为这样做的一个好处是,所有模型都将具有相同的权重,因为每个模型中的特征都是按比例缩放的。这是一种有效的方法吗?如果是的话,它是否比在所有模型上逐个特征地将所有Shapley值相加有任何好处

为了明确关于BIN的含义,它们是解释者返回的列表,等于分类数量:

explainer = shap.DeepExplainer(model, X_train)
ShapleyBinVals = explainer.shap_values(X_test)
Bin = ShapleyBinVals[n]
其中n是输出分类的数量。以下是缩放输出的条形图:


请注意,对于每个特征,例如PSWQ_2,y值是一个百分比,所有箱子的百分比之和是1。

SHAP值用于解释模型。如果您正在考虑合并模型,您可能希望检查合并模型(混合或堆叠)。您仍然可以计算集合的形状值。否则,如果您仍然想平均不同模型的形状值,则必须注意:对于线性模型不重要的是,对于非线性模型可能非常重要,反之亦然。感谢您帮助我澄清,我更新了问题。模型是一样的,只是在n个不同的试验中重新运行。很高兴知道我将如何组合不同的模型。