0Pricing
R Academy · Leçon

Forêts aléatoires avec ranger

Entraînez des modèles de forêts aléatoires, ajustez mtry et ntrees, puis évaluez l’erreur OOB.

Forêts aléatoires avec ranger est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.

Qu’est-ce qu’une forêt aléatoire ?

Une forêt aléatoire construit de nombreux arbres de décision sur des échantillons bootstrap des données, puis fait la moyenne de leurs prédictions (régression) ou effectue un vote à la majorité (classification). Deux sources d’aléatoire donnent son nom à l’ensemble : l’échantillonnage bootstrap des lignes et la sélection aléatoire des caractéristiques à chaque division.

library(ranger)

# Minimal random forest: 500 trees, auto mtry
rf <- ranger(
  medv ~ .,
  data      = MASS::Boston,
  num.trees = 500
)

print(rf)

Le paramètre mtry

mtry est le nombre de caractéristiques prises en compte aléatoirement à chaque division. Utiliser moins de caractéristiques que le total décorelle les arbres et réduit la variance. La règle générale est mtry = sqrt(p) pour la classification et mtry = p/3 pour la régression, où p est le nombre de variables prédictives.

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))

Erreur OOB — Validation gratuite

Comme chaque arbre est entraîné sur un échantillon bootstrap, environ un tiers des observations sont laissées de côté (hors échantillon, OOB). Ces échantillons OOB servent d’ensemble de validation intégré pour chaque arbre. L’erreur OOB agrégée constitue une estimation presque non biaisée de l’erreur de test — aucun ensemble de validation distinct n’est nécessaire.

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)

Importance des variables

Définir importance = 'impurity' enregistre la diminution totale de l’impureté des nœuds (Gini ou MSE) pour chaque caractéristique dans l’ensemble des arbres. Définir importance = 'permutation' mesure la perte d’exactitude lorsque chaque caractéristique est mélangée aléatoirement — cette méthode est plus fiable, mais plus lente.

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')

Prédictions avec ranger

Utilisez predict(rf, data = test) pour générer des prédictions. Le résultat est une liste ; accédez aux prédictions avec $predictions. Pour la classification, les prédictions sont par défaut des niveaux de factor.

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))

Principe de la matrice de confusion

Pour la classification, une matrice de confusion met en tableau croisé les classes réelles et les classes prédites. Les principales mesures qui en sont dérivées comprennent l’exactitude, la précision (TP / (TP + FP)), le rappel (TP / (TP + FN)) et le score F1. ranger fournit directement une matrice de confusion 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)

Régler mtry et num.trees

Un plus grand nombre d’arbres réduit toujours la variance (jusqu’à des rendements décroissants autour de 300 à 500 arbres). Le paramètre mtry possède une valeur optimale. Une simple boucle de réglage évalue l’erreur OOB sur une grille de valeurs de mtry afin de trouver la valeur optimale sans validation croisée.

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 pour la classification

Pour la classification, définissez probability = TRUE afin d’obtenir les probabilités prédites des classes plutôt que des étiquettes catégoriques. Cela est nécessaire pour calculer la courbe ROC et obtenir des estimations de probabilités calibrées, et correspond au format de sortie attendu par les mesures 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)

Parallélisme dans ranger

ranger est conçu pour la rapidité et le parallélisme. Définissez num.threads afin d’utiliser tous les cœurs CPU disponibles. Cela peut produire des accélérations spectaculaires par rapport à l’ancien package randomForest, en particulier pour les grands jeux de données comportant de nombreux arbres.

# 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 via tidymodels

Vous pouvez utiliser ranger via l’interface tidymodels, qui fournit une syntaxe cohérente et s’intègre aux flux de travail, à la validation croisée et au réglage. Indiquez le moteur avec 'ranger' et transmettez les arguments propres au moteur avec 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)

Interpréter la sortie de ranger

Le modèle ranger affiché indique : le nombre d’arbres, la variable cible, le nombre de caractéristiques utilisées, l’erreur de prédiction OOB et le R au carré (pour la régression). Vérifiez toujours l’erreur OOB comme contrôle rapide de cohérence — si elle est extrêmement faible sur un grand jeu de données, suspectez une fuite de données.

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')

Vérification rapide

Dans une forêt aléatoire construite avec ranger, que permet d’estimer l’erreur OOB (hors échantillon) ?

Récapitulatif des forêts aléatoires

Points clés des forêts aléatoires avec ranger :

  • Les forêts aléatoires combinent de nombreux arbres construits sur des échantillons bootstrap, avec une sélection aléatoire des caractéristiques à chaque division.
  • mtry : sqrt(p) pour la classification, p/3 pour la régression ; réglez ce paramètre.
  • L’erreur OOB fournit gratuitement une estimation de validation presque non biaisée.
  • importance = 'impurity' ou 'permutation' fournit des scores d’importance des variables.
  • Définissez probability = TRUE pour obtenir les probabilités des classes en classification.
  • ranger est fortement parallélisé ; utilisez num.threads pour les grands jeux de données.
  • Intégrez-le à tidymodels avec 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))

Questions Fréquemment Posées

La leçon « Forêts aléatoires avec ranger » est-elle gratuite ?

Oui — le texte complet de « Forêts aléatoires avec ranger » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Forêts aléatoires avec ranger » ?

Entraînez des modèles de forêts aléatoires, ajustez mtry et ntrees, puis évaluez l’erreur OOB. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer R Academy ?

Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Forêts aléatoires avec ranger » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon R Academy ?

Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Arbres de décision : fondement des ensembles
  2. Forêts aléatoires avec ranger
  3. Boosting de gradient avec xgboost
  4. Importance des caractéristiques et interprétation des modèles
← Retour à R Academy