如何为 R 中的每个预测计算回归中的置信度分数(使用随机森林/XGBoost)?

机器算法验证 r 回归 随机森林 预言 助推
2022-03-20 02:30:17

在使用随机森林或极端梯度提升 (XGBoost) 等算法时,有没有办法为每个预测值获得置信度分数(我们也可以称其为置信度值或似然度)?假设这个置信度分数的范围从 0 到 1,并显示我对特定预测的信心

根据我在互联网上找到的有关信心的信息,通常以间隔来衡量。confpred这是使用库中的函数计算的置信区间的示例lava

library(lava)
set.seed(123)
n     <- 200
x     <- seq(0,6,length.out=n)
delta <- 3
ss    <- exp(-1+1.5*cos((x-delta)))
ee    <- rnorm(n,sd=ss)
y     <- (x-delta)+3*cos(x+4.5-delta)+ee
d     <- data.frame(y=y,x=x)
newd  <- data.frame(x=seq(0,6,length.out=50))
cc    <- confpred(lm(y~poly(x,3),d),data=d,newdata=newd)
if (interactive()) { ##'
  plot(y~x,pch=16,col=lava::Col("black"), ylim=c(-10,15),xlab="X",ylab="Y")
  with(cc, lava::confband(newd$x, lwr, upr, fit,  lwd=3, polygon=T, 
                          col=Col("blue"), border=F))
}

代码输出仅给出置信区间:

显示点、预测和置信区间的图表

还有一个库conformal,但它也用于回归中的置信区间:“保形允许在保形预测框架中计算预测误差:(i)用于分类的 p.values,和(ii)用于回归的置信区间。 "

那么有没有办法:

  1. 要获得任何回归问题中每个预测的置信度值?

  2. 如果没有办法,将每个观察值用作置信度分数是否有意义:

    置信区间上下边界之间的距离(如上面的示例输出)。因此,在这种情况下,置信区间越宽,不确定性就越大(但这没有考虑区间中的实际值)

1个回答

您所说的置信度分数可以从单个预测的不确定性中获得(例如,通过取反)。

用 bagging 量化这种不确定性总是可能的,并且在随机森林中相对简单——但这些估计是有偏差的。赌注等人。(2014 年)描述了两个程序,可以更有效地解决这些不确定性,并减少偏差。这是基于自举后折刀和无穷小折刀的偏差校正版本。您可以在 R 包rangergrf.

最近,通过使用由条件推理树构建的随机森林对此进行了改进。基于模拟研究 (Brokamp et al. 2018),当使用条件推理树构建随机森林时,无穷小折刀估计器似乎更准确地估计了预测误差。这是在包中实现的RFinfer


Wager, S.、Hastie, T. 和 Efron, B. (2014)。随机森林的置信区间:折刀和无穷小折刀。机器学习研究杂志,15(1),1625-1651。

Brokamp, C.、Rao, MB、Ryan, P. 和 Jandarov, R. (2017)。使用无穷小折刀估计渐近方差的随机森林中重采样和递归分区方法的比较。统计,6(1),360-372。