如何找出R中随机林的RMSE?
我需要找出基于回归的随机森林的RMSE 首先,我对随机森林使用了这个公式:如何找出R中随机林的RMSE?,r,tree,random-forest,R,Tree,Random Forest,我需要找出基于回归的随机森林的RMSE 首先,我对随机森林使用了这个公式: randomForest(price ~ ., type = "regression", data = train.data, ntree = 400, mtry = 20) 我是否需要在下一步中做一个预测,以找出这个问题的RMSE?因为我将使用测试数据进行预测,然后使用rmse=(实际,预测),这是我从“Metrics”包下载的。此外,12的种子是否适用于具有1000 OB的数据。和20个
randomForest(price ~ ., type = "regression", data = train.data, ntree = 400,
mtry = 20)
我是否需要在下一步中做一个预测,以找出这个问题的RMSE?因为我将使用测试数据进行预测,然后使用rmse=(实际,预测),这是我从“Metrics”包下载的。此外,12的种子是否适用于具有1000 OB的数据。和20个变量?是的,您需要在测试数据上使用预测。我不知道您在哪一点设置种子,所以在下面的示例中,我在将数据拆分为train和test时设置了一次种子,以便可以复制此train,test set。另一个实例是在运行randomForest之前(在lappy中)。种子用于复制随机森林的结果 例如:
library(randomForest)
library(MASS)
data = Boston
set.seed(999)
trn = sample(nrow(data),400)
traindata = data[trn,]
testdata = data[-trn,]
res = lapply(c(111,222),function(i){
set.seed(i)
fit = randomForest(medv ~.,data=traindata)
pred_values = predict(fit,testdata)
actual_values = testdata$medv
data.frame(seed=i,
metrics_rmse = rmse(pred_values,actual_values),
cal_rmse = mean((pred_values-actual_values)^2)^0.5
)
})
res = do.call(rbind,res)
head(res)
seed metrics_rmse cal_rmse
1 111 4.700245 4.700245
2 222 4.742978 4.742978
在将数据划分为
training
和test
组的场景中,为了计算测试数据的均方根误差(RMSE),使用predict()
函数,然后计算RMSE
我们将使用mlbench
包中的BostonHousing
数据来说明
library(randomForest)
library(mlbench)
library(caret) # use createDataPartition() function
set.seed(95014)
data(BostonHousing)
# partition based on whether house is adjacent to Charles River
inTraining <- createDataPartition(BostonHousing$chas, p = 0.6, list=FALSE)
training <- BostonHousing[inTraining,]
testing <- BostonHousing[-inTraining,]
fit <- randomForest(medv ~ ., training, ntree=30, type="regression")
为了计算RMSE,我们还可以提取与最终创建的树相对应的fit$mse
的最后一个元素,并取其平方根
# obtain MSE as of last element in fit$mse
# which should match the output from printout
fit$mse[length(fit$mse)]
# take square root to calculate RMSE for the model
sqrt(fit$mse[length(fit$mse)])
> fit$mse[length(fit$mse)]
[1] 16.90869
> sqrt(fit$mse[length(fit$mse)])
[1] 4.112018
为了计算测试数据的RMSE,我们需要首先生成预测值
# now illustrate how to calculate RMSE on test data vs. training data
predValues <- predict(fit,testing)
或者,我们可以加载Metrics
库并使用其rmse()
函数。请注意,它产生的结果与我们从基数R计算的结果相同
# compare to Metrics::rmse() function
library(Metrics)
rmse(testing$medv,predValues)
> rmse(testing$medv,predValues)
[1] 2.944943
关于seed的问题,函数set.seed()
修复了随机数生成器的启动,以使分析结果可重复。它不会影响分析的“质量”
在使用访问随机数生成器的任何R函数之前,通过使用set.seed(95014)
,任何运行此答案代码的人都将收到与此答案中发布的rmse()
完全相同的结果
# we can calculate it directly
sqrt(mean((testing$medv -predValues)^2))
> sqrt(mean((testing$medv -predValues)^2))
[1] 2.944943
>
# compare to Metrics::rmse() function
library(Metrics)
rmse(testing$medv,predValues)
> rmse(testing$medv,predValues)
[1] 2.944943