Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找出R中随机林的RMSE?_R_Tree_Random Forest - Fatal编程技术网

如何找出R中随机林的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个

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

首先,我对随机森林使用了这个公式:

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