有没有办法解释随机森林模型的预测?

机器算法验证 机器学习 随机森林
2022-03-16 09:51:51

假设我有一个基于随机森林的预测分类模型(使用 R 中的 randomForest 包)。我想对其进行设置,以便最终用户可以指定要为其生成预测的项目,并且它将输出分类可能性。到目前为止,没有问题。

但是能够输出变量重要性图之类的东西会很有用/很酷,但是对于被预测的特定项目,而不是对于训练集。就像是:

项目 X 被预测为狗(73% 的可能性)
因为:
腿=4
呼吸=坏
毛=短
食物=讨厌

你明白了。从训练有素的随机森林中提取这些信息是否有标准或至少合理的方法?如果是这样,是否有人有代码可以为 randomForest 包执行此操作?

2个回答

第一个想法只是从变量重要性中模仿淘汰策略,并测试混合每个属性将如何降低森林对对象分类的信心(在 OOB 上,显然有一些重复)。这需要一些编码,但肯定是可以实现的。

然而,我觉得这只是一个坏主意——结果可能会像地狱一样多变(没有稳定对象平均的影响)、嘈杂(对于不太自信的对象,无意义的属性可能会产生很大的影响)并且难以解释(两个或多个属性协作规则可能会导致每个贡献属性的随机影响)。

为了不给您留下否定的答案,我宁愿尝试查看邻近矩阵以及它可能揭示的可能原型——这似乎更加稳定和直接。

我会尝试使用石灰框架。

它适用于许多模型(包括随机森林)。它可以用于局部解释(即解释单个预测)或全局解释(即解释整个模型)。

引自摘要

在这项工作中,我们提出了 LIME,这是一种新颖的解释技术,通过在预测周围学习可解释的模型,以可解释和忠实的方式解释任何分类器的预测。我们还提出了一种通过以非冗余方式呈现具有代表性的个体预测及其解释来解释模型的方法,将任务定义为子模块优化问题。

它有Rpython的包,如果你用谷歌搜索的话,还有很多例子。