随机森林预测模型

Posted

技术标签:

【中文标题】随机森林预测模型【英文标题】:random forest prediction model 【发布时间】:2019-07-10 08:52:04 【问题描述】:

我正在尝试为价格预测问题建立一个随机森林模型。我已经完成了以下步骤:

1) 将数据拆分为 3 组 train、test 和 valid(要求拆分为 3 组,不仅是 train 和 test)

set.seed(1234)
assignment <- sample(1:3, size = nrow(train), prob = c(0.7, 0.15, 0.15), replace = TRUE) 
#Create a train, validation and tests from the train data
train_train <- train[assignment == 1, ]  
train_valid <- train[assignment == 2, ]  
train_test <- train[assignment == 3, ] 

2) 我已经建立了模型,其中 x 和 y 来自训练集

fit_rf_train <- train(x = train_train[, -which(names(train_train) %in% 
c("Item_Identifier", "Item_Outlet_Sales"))], 
                y = train_train$Item_Outlet_Sales,
                method = "ranger",
                metric = "RMSE",
                tuneGrid = expand.grid(
                  .mtry = 6,
                  .splitrule = "variance",
                  .min.node.size = c(10,15,20)),
                trControl = trControl,
                importance = "permutation",
                num.trees = 350)

我有以下相同火车数据上模型输出的屏幕截图:

3) 使用预测函数我将模型与其他两个数据集一起使用,有效并使用以下代码行进行测试:

prediction_test <- predict(fit_rf_train, train_test)
prediction_valid <- predict(fit_rf_train, train_valid)

我的问题是如何衡量模型在未见数据(测试和有效数据)上的性能?

【问题讨论】:

您使用的是哪个软件包?你如何衡量性能?我认为通过使用 RMSE 作为您选择的指标。越低越好。 caret::RMSE 假设您使用的是 caret 插入符号包。是的,我知道我将使用 RMSE。但我的意思是使用哪个函数来打印我预测函数的性能。我的意思是使用这条线 print(fit_rf_train) 我现在可以看到火车上的 RMSE 值,我该如何使用预测来做到这一点。 您将如何进行分类?你使用confusionMatrix. 现在,你使用RMSE()。输入?RMSE 你会看到几个选项。 如果我输入 RMSE(prediction_test) 我会得到这个错误:参数“obs”丢失,没有默认值。我应该使用训练数据作为 obs 参数的值吗? 我无权访问train。请添加dputtrain 【参考方案1】:

如果您想坚持使用caret,那么您可以执行以下操作:

library(caret)
trainda<-createDataPartition(iris$Sepal.Length,p=0.8,list=F)
valid_da<-iris[-trainda,]
trainda<-iris[trainda,]
ctrl<-trainControl(method="cv",number=5)
set.seed(233)
m<-train(Sepal.Length~.,data=trainda,method="rf",metric="RMSE",trControl = ctrl,verbose=F)
m1<-predict(m,valid_da)
RMSE(m1,valid_da$Sepal.Length)

结果:

[1] 0.3499783

【讨论】:

太好了,谢谢!我还想问一下,我只在火车数据(整个数据的 80%)上构建模型,然后针对其他两组进行测试,或者我应该在整个数据上构建它,这是对的吗? 我觉得还可以。有时您可以在训练阶段“给”模型更多数据以提高“准确性”,尽管这会带来一些偏差和/或拟合问题。 非常感谢!最后一个问题:我对其他两个数据集的 RMSE 值有所降低。测试 RMSE:1.909679 |有效 RMSE:1.928796 哪个比火车数据集更好,对此我们能说什么? 如果不知道实际数据是什么样子,我无法确定。无论如何,它看起来还不错。 我建议查看一些特征工程或查看特征重要性图,看看哪些是最重要的特征,看看模型在有或没有这些特征的情况下如何表现。如果您使用importance=T 进行培训,则可以使用varImp(m) 进行上述示例(m

以上是关于随机森林预测模型的主要内容,如果未能解决你的问题,请参考以下文章

随机森林预测模型

分类算法 - 随机森林

十大经典预测算法七---随机森林

使用随机森林模型提高预测新数据的速度

基于随机森林算法完成鸢尾花卉品种预测任务 代码+数据

Kaggle 快速模型之 Random Forrest 随机森林