Bosques aleatorios con ranger
Entrene modelos de bosques aleatorios, ajuste mtry y ntrees y evalúe el error OOB.
Bosques aleatorios con ranger es una lección gratuita de R Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de R Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de R Academy incluye 4 lecciones en total.
¿Qué es un bosque aleatorio?
Un bosque aleatorio construye muchos árboles de decisión con muestras bootstrap de los datos y, a continuación, promedia sus predicciones (regresión) o realiza una votación mayoritaria (clasificación). Dos fuentes de aleatoriedad dan nombre al ensamblado: el muestreo bootstrap de las filas y la selección aleatoria de características en cada división.
library(ranger)
# Minimal random forest: 500 trees, auto mtry
rf <- ranger(
medv ~ .,
data = MASS::Boston,
num.trees = 500
)
print(rf)El parámetro mtry
mtry es el número de características que se consideran aleatoriamente en cada división. Utilizar menos características que el total descorrelaciona los árboles y reduce la varianza. La regla general es mtry = sqrt(p) para clasificación y mtry = p/3 para regresión, donde p es el número de predictores.
p <- ncol(MASS::Boston) - 1 # number of predictors
rf_class <- ranger(
Species ~ ., data = iris,
num.trees = 500,
mtry = floor(sqrt(4)) # sqrt(p) for classification
)
rf_reg <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = floor(p / 3) # p/3 for regression
)
cat('Classification OOB Error:', rf_class$prediction.error)
cat('Regression OOB RMSE:', sqrt(rf_reg$prediction.error))Error OOB — Validación gratuita
Como cada árbol se entrena con una muestra bootstrap, aproximadamente un tercio de las observaciones queda fuera (out-of-bag, OOB). Estas muestras OOB actúan como un conjunto de validación integrado para cada árbol. El error OOB agregado es una estimación casi insesgada del error de prueba; no se necesita un conjunto de validación independiente.
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = 4
)
# OOB MSE
cat('OOB MSE:', rf$prediction.error)
# OOB RMSE
cat('OOB RMSE:', sqrt(rf$prediction.error))
# For classification: OOB error rate
rf_cl <- ranger(Species ~ ., data = iris)
cat('OOB Error Rate:', rf_cl$prediction.error)Importancia de las variables
Establecer importance = 'impurity' registra la disminución total de la impureza de los nodos (Gini o MSE) para cada característica en todos los árboles. Establecer importance = 'permutation' mide la pérdida de exactitud cuando cada característica se mezcla aleatoriamente; este método es más fiable, pero más lento.
rf_imp <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
importance = 'impurity'
)
# Sorted importance scores
imp <- sort(rf_imp$variable.importance, decreasing = TRUE)
print(imp)
# Quick plot
barplot(imp, las = 2, col = 'steelblue',
main = 'Random Forest Variable Importance')Predicciones con ranger
Utilice predict(rf, data = test) para generar predicciones. El resultado es una lista; acceda a las predicciones mediante $predictions. En clasificación, las predicciones son niveles de factor de forma predeterminada.
set.seed(1)
idx <- sample(nrow(MASS::Boston), 400)
train <- MASS::Boston[idx, ]
test <- MASS::Boston[-idx, ]
rf <- ranger(medv ~ ., data = train, num.trees = 500)
pred <- predict(rf, data = test)
test_rmse <- sqrt(mean((pred$predictions - test$medv)^2))
cat('Test RMSE:', round(test_rmse, 3))Concepto de matriz de confusión
En clasificación, una matriz de confusión cruza las clases reales con las predichas. Entre las métricas clave que se derivan de ella se incluyen la exactitud, la precisión (TP / (TP + FP)), la exhaustividad (TP / (TP + FN)) y la puntuación F1. ranger proporciona directamente la matriz de confusión OOB.
rf_cl <- ranger(
Species ~ ., data = iris,
num.trees = 500,
mtry = 2
)
# OOB confusion matrix
print(rf_cl$confusion.matrix)
# OOB error rate
cat('OOB Error Rate:', rf_cl$prediction.error)
# Manual accuracy on OOB predictions
# (1 - error rate)
cat('OOB Accuracy:', 1 - rf_cl$prediction.error)Ajustar mtry y num.trees
Un mayor número de árboles siempre reduce la varianza (hasta que aparecen rendimientos decrecientes alrededor de 300-500). El parámetro mtry tiene un punto óptimo. Un bucle de ajuste sencillo evalúa el error OOB en una cuadrícula de valores de mtry para encontrar el valor óptimo sin validación cruzada.
mtry_vals <- c(2, 4, 6, 8, 10)
oob_errors <- sapply(mtry_vals, function(m) {
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 300, mtry = m
)
rf$prediction.error
})
best_mtry <- mtry_vals[which.min(oob_errors)]
cat('Best mtry:', best_mtry)
plot(mtry_vals, sqrt(oob_errors), type = 'b',
xlab = 'mtry', ylab = 'OOB RMSE')ranger para clasificación
Para clasificación, establezca probability = TRUE para obtener predicciones de probabilidad de clase en lugar de etiquetas discretas. Esto es necesario para calcular la curva ROC y obtener estimaciones de probabilidad calibradas, y coincide con el formato de salida que esperan las métricas de yardstick.
# Ensure the target is a factor
iris$Species <- as.factor(iris$Species)
rf_prob <- ranger(
Species ~ ., data = iris,
num.trees = 300,
probability = TRUE # output class probabilities
)
# Predictions are a matrix of probabilities
pred_prob <- predict(rf_prob, data = iris[1:5, ])
print(pred_prob$predictions)Paralelismo en ranger
ranger está diseñado para ofrecer velocidad y paralelismo. Establezca num.threads para utilizar todos los núcleos de CPU disponibles. Esto puede producir aceleraciones drásticas frente al paquete randomForest anterior, especialmente con conjuntos de datos grandes y muchos árboles.
# Use all available cores
rf_fast <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 1000,
mtry = 4,
num.threads = parallel::detectCores()
)
cat('Trees:', rf_fast$num.trees)
cat('Threads used:', rf_fast$num.threads)
cat('OOB RMSE:', sqrt(rf_fast$prediction.error))ranger mediante tidymodels
Puede utilizar ranger mediante la interfaz de tidymodels, que proporciona una sintaxis coherente y se integra con flujos de trabajo, validación cruzada y ajuste de hiperparámetros. Especifique el motor como 'ranger' y pase los argumentos específicos del motor con set_engine().
library(parsnip)
library(workflows)
rf_spec <- rand_forest(
mtry = tune(),
trees = 500,
min_n = tune()
) |>
set_engine('ranger', importance = 'impurity') |>
set_mode('regression')
wf <- workflow() |>
add_recipe(rec) |>
add_model(rf_spec)
print(wf)Interpretar la salida de ranger
El modelo de ranger impreso muestra: el número de árboles, la variable objetivo, el número de características utilizadas, el error de predicción OOB y el R cuadrado (para regresión). Compruebe siempre el error OOB como verificación rápida de coherencia; si es extremadamente bajo en un conjunto de datos grande, sospeche que existe una fuga de datos.
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500, mtry = 4,
importance = 'impurity'
)
# Key output fields
cat('OOB MSE: ', rf$prediction.error, '\n')
cat('OOB RMSE: ', sqrt(rf$prediction.error), '\n')
cat('R-squared: ', rf$r.squared, '\n')
cat('Num trees: ', rf$num.trees, '\n')
cat('Num features: ', rf$num.independent.variables, '\n')Comprobación rápida
En un bosque aleatorio creado con ranger, ¿qué estima el error OOB (out-of-bag)?
Repaso de los bosques aleatorios
Ideas clave de Bosques aleatorios con ranger:
- Los bosques aleatorios combinan muchos árboles construidos con muestras bootstrap y una selección aleatoria de características en cada división.
mtry: sqrt(p) para clasificación y p/3 para regresión; ajuste este parámetro.- El error OOB proporciona una estimación de validación gratuita y casi insesgada.
importance = 'impurity'o'permutation'proporciona puntuaciones de importancia de las variables.- Establezca
probability = TRUEpara obtener probabilidades de clase en clasificación. - ranger está altamente paralelizado; utilice
num.threadscon conjuntos de datos grandes. - Integre ranger con tidymodels mediante
rand_forest() |> set_engine('ranger').
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = 4,
importance = 'impurity',
num.threads = parallel::detectCores()
)
cat('OOB RMSE:', sqrt(rf$prediction.error))
cat('R2:', rf$r.squared)
print(sort(rf$variable.importance, decreasing = TRUE))Preguntas frecuentes
¿La lección «Bosques aleatorios con ranger» es gratis?
Sí — el texto completo de «Bosques aleatorios con ranger» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de R Academy, actualiza a CoddyKit PRO. El curso de R Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Bosques aleatorios con ranger»?
Entrene modelos de bosques aleatorios, ajuste mtry y ntrees y evalúe el error OOB. Practicas R Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar R Academy?
No se requiere experiencia previa. R Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Bosques aleatorios con ranger»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de R Academy?
Sí. Cada lección de R Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Árboles de decisión: base de los ensamblajes
- Bosques aleatorios con ranger
- Gradient boosting con xgboost
- Importancia de las características e interpretación de modelos