预测随机森林回归中的不确定性

机器算法验证 置信区间 随机森林 预测区间 不确定
2022-03-04 21:41:52

场景:我正在尝试构建一个随机森林回归器来加速探测一个大的相空间。我正在使用 python/scikit-learn 执行回归,并且我能够获得一个模型,该模型在将已知数据拆分为训练/测试集时具有相当低的交叉验证错误。

现在我想开始询问我的模型有多自信(我对置信区间和预测区间之间的差异有点困惑)。目前我知道如何在给定数据,现在我希望能够衡量不确定性。如果模型足够不确定,我希望它让我知道,以便我可以将该案例添加到训练集中。yx

我的印象是随机森林是一种集成方法。我们生长棵决策树,然后我们的预测器由下式给出: 其中是一些权重,是第个树的预测值。N

y=iNwiTi(x)
wiTi(x)i

也许最简单(而且绝不是最有希望)的方法是尝试采用类似方差的方法:

σ2=iN(Ti(x)y(x))2

本指南似乎建议我们可以使用每棵树作为观察进行分位数分析。不幸的是,我不确定我是否遵循这个逻辑,因为在我看来,即使对于训练集中的数据点,树之间也应该存在一些差异。

这篇文章似乎提到了上述方法的缺陷,但不幸的是,我不能真正遵循他们建议我们做的事情(因为我在 R 中的技能不是他们可以做到的)。有人可以权衡这是否是我应该跟随的火车,也许可以帮助我了解发生了什么?我不明白在哪里对样本进行假设。在 Python 中看到类似的代码可能对我很有帮助。

这篇论文似乎也很有用,但这些术语/符号完全超出了我的专业范围,而且我现在基本上无法阅读。

虽然我在应用程序级别从事统计工作,但距离上一次正式课程已经有一段时间了。所以对我来说进入障碍的一部分是术语/符号的使用。

编辑以提供更多细节。

2个回答

据我所知,RF 预测的不确定性可以使用几种方法来估计,其中之一是分位数回归森林方法(Meinshausen,2006),它估计预测区间。其他方法包括 Mentch & Hooker (2016) 的 U 统计方法和 Coulston (2016) 的蒙特卡罗模拟方法。

为随机森林预测构建预测区间的问题已在以下论文中得到解决:

张、浩哲、约书亚·齐默尔曼、丹·内特尔顿和丹尼尔·J·诺德曼。“随机森林预测区间”。美国统计学家,2019。

R 包“rfinterval”是其在 CRAN 上可用的实现。

安装

要安装 R 包rfinterval

#install.packages("devtools")
#devtools::install_github(repo="haozhestat/rfinterval")
install.packages("rfinterval")
library(rfinterval)
?rfinterval

用法

快速开始:

train_data <- sim_data(n = 1000, p = 10)
test_data <- sim_data(n = 1000, p = 10)

output <- rfinterval(y~., train_data = train_data, test_data = test_data,
                     method = c("oob", "split-conformal", "quantreg"),
                     symmetry = TRUE,alpha = 0.1)

### print the marginal coverage of OOB prediction interval
mean(output$oob_interval$lo < test_data$y & output$oob_interval$up > test_data$y)

### print the marginal coverage of Split-conformal prediction interval
mean(output$sc_interval$lo < test_data$y & output$sc_interval$up > test_data$y)

### print the marginal coverage of Quantile regression forest prediction interval
mean(output$quantreg_interval$lo < test_data$y & output$quantreg_interval$up > test_data$y)
```