library(tree)
datos = read.table('coches.txt',header=T)
datos = na.omit(datos)
datos$origen = factor(datos$origen, labels = c("USA","Europa","Japon"))
Dividimos los datos en dos partes, una para entrenar el modelo y otra para calcular el error de predicción con datos diferentes de los utilizados para entrenar:
set.seed(321)
ndat = nrow(datos)
train = sample(1:ndat,ndat/2) # la mitad de los datos para entranamiento
datos_train = datos[train,] # trainning set
datos_test = datos[-train,] # test set
\[ \hat f_{RF} = \frac{1}{B}\sum_{b=1}^B \hat f_b(x) \]
library(randomForest)
## randomForest 4.6-14
## Type rfNews() to see new features/changes/bug fixes.
# numero total de regresores: 7
rf1 = randomForest(consumo ~ ., data = datos_train, mtry=3, ntree = 500)
Error del modelo:
yp_train_rf1 <- predict(rf1, newdata = datos_train)
y_train = datos_train$consumo
( MSE_train_rf1 = mean((y_train - yp_train_rf1)^2) ) # error cuadratico medio en los datos de training
## [1] 0.3684751
Error de predicción:
# prediccion del consumo con los datos de validacion
yp_test_rf1 = predict(rf1, newdata = datos_test)
# error del validation set
y_test = datos_test$consumo
(MSE_test_rf1 = mean((y_test - yp_test_rf1)^2))
## [1] 1.887119
rf2 = randomForest(consumo ~ ., data = datos_train, mtry=5, ntree = 500)
Error del modelo:
yp_train_rf2 <- predict(rf2, newdata = datos_train)
( MSE_train_rf2 = mean((y_train - yp_train_rf2)^2) ) # error cuadratico medio en los datos de training
## [1] 0.3558997
Error de predicción:
# prediccion del consumo con los datos de validacion
yp_test_rf2 = predict(rf2, newdata = datos_test)
# error del validation set
(MSE_test_rf2 = mean((y_test - yp_test_rf2)^2))
## [1] 1.919372
rf3 = randomForest(consumo ~ ., data = datos_train, mtry=5, ntree = 500, importance = T)
importance(rf3)
## %IncMSE IncNodePurity
## cc 24.013907 1068.95076
## cv 19.808911 561.64203
## peso 22.639894 881.06429
## acel 8.570156 44.64124
## ano 45.102802 273.16834
## origen 4.624201 12.50342
## cilindros 7.223159 150.47544
%IncMSE: descenso de la calidad de las predicciones realizadas en los datos out of samples cuando cada variable es excluida en la partición del nodo.
IncNodePurity: suma del descenso acumulado del RSS al partir por dicha variable.
varImpPlot(rf3)