随机森林预测模型
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
。请添加dput
的train
【参考方案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
)以上是关于随机森林预测模型的主要内容,如果未能解决你的问题,请参考以下文章