我如何找出R中随机森林的RMSE?

问题描述 投票:0回答:2

我需要基于回归找出随机森林的RMSE。

首先,我将此公式用于随机森林:

randomForest(price ~ ., type = "regression", data = train.data, ntree  = 400,
             mtry = 20)

我是否需要做进一步的预测以找出RMSE?因为我要对测试数据进行预测,然后使用rmse =(实际的,预测的),所以我从软件包“ Metrics”中下载了该值。此外,12的种子适用于1000 obs的数据。和20个变量?

r tree random-forest
2个回答
0
投票

是,您需要对测试数据使用预测。我不知道在哪一点设置种子,因此在下面的示例中,在将数据拆分为训练和测试时,我只设置了一次种子,以便可以复制该训练集。另一个实例是在运行randomForest之前(在lapply中)。种子供您重现randomForest的结果。

例如:

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

0
投票

[有人将数据分为trainingtest组的情况,要计算测试数据的均方根误差(RMSE),请使用predict()函数,然后计算RMSE。

我们将使用BostonHousing包中的mlbench数据进行说明。

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")

已经生成了模型,通过打印模型输出,我们可以在training数据集中看到均方误差。

fit

> fit

Call:
 randomForest(formula = medv ~ ., data = training, ntree = 30,      type = "regression") 
               Type of random forest: regression
                     Number of trees: 30
No. of variables tried at each split: 4

          Mean of squared residuals: 16.90869
                    % Var explained: 81.51

要计算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)

RMSE只是平方误差平均值的平方根。

# we can calculate it  directly 
sqrt(mean((testing$medv -predValues)^2))

> sqrt(mean((testing$medv -predValues)^2))
[1] 2.944943
>

或者,我们可以加载Metrics库并使用其rmse()函数。注意,它产生的结果与我们根据Base R计算得出的结果相同。

# compare to Metrics::rmse() function
library(Metrics)
rmse(testing$medv,predValues)

> rmse(testing$medv,predValues)
[1] 2.944943

关于种子的问题,set.seed()函数修复了随机数生成器的开头,以使分析结果可再现。它不会影响分析的“质量”。

通过使用set.seed(95014),然后再使用任何访问随机数生成器的R函数,从此答案运行代码的任何人都将获得与该答案中发布的rmse()完全相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.