我需要基于回归找出随机森林的RMSE。
首先,我将此公式用于随机森林:
randomForest(price ~ ., type = "regression", data = train.data, ntree = 400,
mtry = 20)
我是否需要做进一步的预测以找出RMSE?因为我要对测试数据进行预测,然后使用rmse =(实际的,预测的),所以我从软件包“ Metrics”中下载了该值。此外,12的种子适用于1000 obs的数据。和20个变量?
是,您需要对测试数据使用预测。我不知道在哪一点设置种子,因此在下面的示例中,在将数据拆分为训练和测试时,我只设置了一次种子,以便可以复制该训练集。另一个实例是在运行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
[有人将数据分为training
和test
组的情况,要计算测试数据的均方根误差(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()
完全相同的结果。