【问题标题】:In Leave One Out Cross Validation, How can I Use `shap.Explainer()` Function to Explain a Machine Learning Model?在留一法交叉验证中,如何使用 `shap.Explainer()` 函数来解释机器学习模型?
【发布时间】:2021-06-23 07:04:23
【问题描述】:

问题背景

我想解释使用在shap Python 库中实现的 SHapley Additive exPlanations (SHAP) 的机器学习 (ML) 模型的结果。作为函数shap.Explainer()的参数,我需要传递一个ML模型(例如XGBRegressor())。但是,在留一法交叉验证 (LOOCV) 的每次迭代中,ML 模型都会有所不同,因为在每次迭代中,我都在不同的数据集上进行训练(1 个参与者的数据会不同)。此外,由于我在每次迭代中都进行特征选择,因此模型会有所不同。

那么,我的问题

在LOOCV中,如何使用shap库的shap.Explainer()函数来呈现机器学习模型的性能?可以注意到,我检查了 SO 的几个教程(例如this onethis one)和几个问题(例如this one)。但我没能找到问题的答案。

感谢阅读!


更新

我知道在LOOCV中,每次迭代找到的模型都可以用shap.Explainer()解释。但是,由于有 250 个参与者的数据,如果我在这里为每个模型申请 shap,将有 250 个输出!因此,我想获得一个输出来展示 250 个模型的性能。

【问题讨论】:

  • LOOCV 仍然是一个 CV,您可以在其中遗漏一个数据点,训练一个模型并检查模型对遗漏数据的泛化能力。在 LOOCV 中应用 SHAP 是没有问题的。我建议您检查您的定义或描述您遇到的确切问题。
  • 嗨@SergeyBushmanov,感谢您的回复。我已经更新了我的问题。请检查。

标签: python cross-validation shap leave-one-out


【解决方案1】:

您似乎在执行LOOCV 时在 250 个数据点上训练模型。这是关于选择一个具有超参数的模型,以确保最佳的泛化能力。

模型解释与训练的不同之处在于您不会筛选不同的超参数集——请注意,250 LOOCV 已经过分了。你会用 250'000 行来做吗? -- 您更愿意尝试了解哪些功能会影响输出的方向和程度。

训练有其自身的局限性(数据的可用性、新数据是否与模型所基于的数据相似、模型是否足以捕捉数据的特性并很好地概括等),但也不要高估解释练习.它仍然是尝试了解输入如何影响输出。您可能愿意平均 250 个不同的 SHAP 值矩阵。但是您是否期望结果与单个随机训练/测试拆分有很大不同?

请注意:

但是,在 Leave One Out Cross Validation (LOOCV) 的每次迭代中,ML 模型都会有所不同,因为在每次迭代中,我都在不同的数据集上进行训练(1 个参与者的数据会有所不同)。

LOOCV 的每次迭代中,模型仍然相同(相同的功能,超参数可能不同,具体取决于您对iteration 的定义)。它仍然是相同的数据集(相同的特征)

此外,由于我在每次迭代中进行特征选择,模型都会有所不同。

没关系。将生成的模型提供给 SHAPexplainer,你会得到你想要的。

【讨论】:

  • 您好,谢尔盖·布什马诺夫,+1 为您提供不错的答案。还要感谢您对 SHAP 值进行平均的建议。但我有两个担忧。 1)当在每次迭代中,模型会得到不同参与者的数据,你怎么说模型还是一样的? 2) 由于特征选择可以在某些迭代中返回不同的特征集,你怎么说没关系?例如在第一次迭代中,它选择 f1 和 f2。在第 2 次迭代中,它选择 f2 和 f3 作为重要特征。
  • SHAP 不是用来解释 CV 的,一开始我尽量说清楚。在不同的超参数集上平均 CV 结果解释了应该选择哪个集,而 SHAP 在这里是错误的工具。完成 CV 后,欢迎您将模型提供给 SHAP 解释器。
  • 嗨,谢尔盖·布什马诺夫,很抱歉再问你一个问题。如果计算 SHAP 值的平均值,是否发现任何问题?然后,它将生成一个输出,显示每个特征的 SHAP 值的平均值(对于 250 个模型)。
  • 您可以随意对 SHAP 值进行平均:原始数据的平均值(期望得到的 SHAP 值接近 0)、abs 的平均值/中位数、许多其他值或平均值您从一开始就坚持的 250 个矩阵。我的问题是,如果您很可能通过单个 random train|test split 达到相同的效果,那么这个花哨的练习有什么意义?实际上,当您对 12PB 数据进行大数据练习时,您的行动方案是什么?
  • 非常感谢您的回复,也感谢您提出问题。 1)如果我得到相同的结果,那么,我认为没有必要计算平均值。但是,我发现有时即使为特征选择算法设置相同的random_state,一组重要特征也会有所不同。因此,我认为 SHAP 值也可以不同。 2) 当然对于 12PB 的数据,我不会使用 LOOCV :)。
猜你喜欢
  • 2021-01-07
  • 1970-01-01
  • 2019-12-02
  • 2020-11-05
  • 2021-06-09
  • 2021-04-15
  • 1970-01-01
  • 2014-09-13
  • 2020-09-18
相关资源
最近更新 更多