1 Lectura de datos

library(tree)
datos = read.table('coches.txt',header=T)
datos = na.omit(datos)
datos$origen = factor(datos$origen, labels = c("USA","Europa","Japon"))

2 Training set vs Test set

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

3 Bootstrap aggregation o Bagging

  • Se remuestrea con reemplazamiento B veces.
  • Se estima un arbol para cada muestra, \(f_b(x)\). Los árboles son profundos y no se podan.
  • Se calcula la predicción proporcionada por cada árbol, \(\hat f_b(x)\).
  • Se promedian las predicciones

\[ \hat f_{bag} = \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.
nreg = ncol(datos)-1
bag1 = randomForest(consumo ~ ., data = datos_train, mtry=nreg, ntree = 500)

Error del modelo:

yp_train_bag1 <- predict(bag1, newdata = datos_train)

y_train = datos_train$consumo
( MSE_train_bag1 = mean((y_train - yp_train_bag1)^2) ) # error cuadratico medio en los datos de training
## [1] 0.3459388

Error de predicción:

# prediccion del consumo con los datos de validacion
yp_test_bag1 = predict(bag1, newdata = datos_test)

# error del validation set
y_test = datos_test$consumo
(MSE_test_bag1 = mean((y_test - yp_test_bag1)^2))
## [1] 1.910328

Comparar los errores con los obtenidos utilizando un solo arbol.

4 Importancia de variables

bag2 = randomForest(consumo ~ ., data = datos_train, mtry=nreg, ntree = 500, importance = T)
importance(bag2)
##             %IncMSE IncNodePurity
## cc        26.811707    1309.98756
## cv        19.413353     508.97169
## peso      21.371510     756.04237
## acel       7.411803      39.37955
## ano       48.580515     275.50205
## origen     2.538933      10.99244
## cilindros  5.815053      91.86055
  • %IncMSE: descenso de la calidad de las predicciones realizadas en los datos out of bag cuando una variable es excluida del modelo (variables importantes en la predicción).

  • IncNodePurity: suma del descenso acumulado del RSS al partir por dicha variable en los diferentes árboles del bagging (variables importantes en el RSS del modelo).

varImpPlot(bag2)