我正在尝试开发一个模型来预测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 <= 40的数据 . 我的最后一次尝试是遵循MrFlick的建议并获得相同的样本大小所有类都为我的预测变量(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 <10 <15等的订购信息 .
首先尝试的一件事是使用简单的线性回归 . 将测试集中的预测值加起来并重新计算准确度 . 更好?更差?如果它更好,那么继续尝试一个randomForest回归模型(或者我喜欢的梯度提升机器) .
其次,您的数据可能无法预测您感兴趣的变量 . 也许数据在上游以某种方式混乱 . 首先计算预测因子与结果的相关性和/或互信息可能是一个很好的诊断方法 .
此外,有这么多分类标签,23%可能实际上并不那么糟糕 . 基于随机猜测正确标记特定数据点的概率是N_class / N.因此,随机猜测模型的准确性不是50% . 您可以计算adjusted rand index以显示它比随机猜测更好 .