В сценарии, где данные разбиты на группы training
и test
, для расчета root среднеквадратичной ошибки (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
, который соответствует конечному созданному дереву, и взять его квадрат root.
# 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 - это просто квадрат root среднего квадрата ошибок.
# we can calculate it directly
sqrt(mean((testing$medv -predValues)^2))
> sqrt(mean((testing$medv -predValues)^2))
[1] 2.944943
>
Кроме того, мы можем загрузить библиотеку Metrics
и использовать ее функцию rmse()
. Обратите внимание, что он выдает тот же результат, который мы вычислили из базы 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()
, как они были опубликованы в этом ответе.