随机森林的高OOB错误率

Posted

技术标签:

【中文标题】随机森林的高OOB错误率【英文标题】:High OOB error rate for random forest 【发布时间】:2017-09-24 07:19:43 【问题描述】:

我正在尝试开发一个模型来预测 WaitingTime 变量。我正在以下数据集上运行随机森林。

$ BookingId          : Factor w/ 589855 levels "00002100-1E20-E411-BEB6-0050568C445E",..: 223781 471484 372126 141550 246376 512394 566217 38486 560536 485266 ...
$ PickupLocality        : int  1 67 77 -1 33 69 67 67 67 67 ...
$ ExZone                : int  0 0 0 0 1 1 0 0 0 0 ...
$ BookingSource         : int  2 2 2 2 2 2 7 7 7 7 ...
$ StarCustomer          : int  1 1 1 1 1 1 1 1 1 1 ...
$ PickupZone            : int  24 0 0 0 6 11 0 0 0 0 ...
$ ScheduledStart_Day    : int  14 20 22 24 24 24 31 31 31 31 ...
$ ScheduledStart_Month  : int  6 6 6 6 6 6 7 7 7 7 ...
$ ScheduledStart_Hour   : int  14 17 7 2 8 8 1 2 2 2 ...
$ ScheduledStart_Minute : int  6 0 58 55 53 54 54 0 12 19 ...
$ ScheduledStart_WeekDay: int  1 7 2 4 4 4 6 6 6 6 ...
$ Season                : int  1 1 1 1 1 1 1 1 1 1 ...
$ Pax                   : int  1 3 2 4 2 2 2 4 1 4 ...
$ WaitingTime           : int  45 10 25 5 15 25 40 15 40 30 ...

我使用样本方法将数据集分成训练/测试子集,分成 80%/20%,然后运行不包括 BookingId 因子的随机森林。这仅用于验证预测。

set.seed(1)
index <- sample(1:nrow(data),round(0.8*nrow(data)))

train <- data[index,]
test <- data[-index,]

library(randomForest)

extractFeatures <- function(data) 
  features <- c(    "PickupLocality",
        "BookingSource",
        "StarCustomer",
        "ScheduledStart_Month",
        "ScheduledStart_Day",
        "ScheduledStart_WeekDay",
        "ScheduledStart_Hour",
        "Season",
        "Pax")
  fea <- data[,features]
  return(fea)


rf <- randomForest(extractFeatures(train), as.factor(train$WaitingTime), ntree=600, mtry=2, importance=TRUE)

问题是所有尝试降低 OOB 错误率和提高准确性的尝试都失败了。我设法达到的最大准确度约为 23%。

我尝试更改使用的特征数量、不同的 ntree 和 mtry 值、不同的训练/测试比率,并且只考虑 WaitingTime 1

tempdata <- subset(tempdata, WaitingTime <= 40)
rndid <- with(tempdata, ave(tempdata$Season, tempdata$WaitingTime, FUN=function(x) sample.int(length(x))))

data <- tempdata[rndid<=27780,]

您是否知道我可以通过其他方式实现至少 50% 以上的准确度?

WaitingTime 类的记录:

提前致谢!

【问题讨论】:

【参考方案1】:

使用 randomForest 超参数几乎可以肯定不会显着提高您的性能。

我建议对您的数据使用回归方法。由于等待时间不是绝对的,因此分类方法可能效果不佳。您的分类模型丢失了 5

首先要尝试的一件事是使用简单的线性回归。将测试集中的预测值分箱并重新计算准确度。更好的?更差?如果它更好,那就继续尝试随机森林回归模型(或者我更喜欢梯度增强机器)。

其次,您的数据可能无法预测您感兴趣的变量。也许数据在上游以某种方式被弄乱了。首先计算预测变量与结果的相关性和/或互信息可能是一个很好的诊断方法。

另外,有这么多分类标签,23% 实际上可能还不错。基于随机猜测正确标记特定数据点的概率为 N_class/N。所以随机猜测模型的准确率不是 50%。您可以计算adjusted rand index 以表明它比随机猜测要好。

【讨论】:

感谢您的回答。将跟随您的领导并恢复。 嗨,我对我的数据集进行了简单的回归,得到了 145.1712 的 sme。我还检查了相关性,发现变量之间没有相关性。我仍然需要计算调整后的兰特指数,尽管我想尝试其他算法,也许有一种可以返回更好的预测。

以上是关于随机森林的高OOB错误率的主要内容,如果未能解决你的问题,请参考以下文章

15、随机森林的OOB

随机森林中oob以及oob的作用?

随机森林如何评估特征重要性

随机森林的oob估计是怎样选取数据的

sklearn 随机森林:.oob_score_ 太低?

随机森林之oob的计算过程