Random Forests mit ranger
Trainieren Sie Random-Forest-Modelle, optimieren Sie mtry und ntrees und bewerten Sie den OOB-Fehler
Random Forests mit ranger ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein Random Forest?
Ein Random Forest erstellt viele Entscheidungsbäume auf Bootstrap-Stichproben der Daten und mittelt anschließend deren Vorhersagen (Regression) oder führt eine Mehrheitsentscheidung durch (Klassifikation). Zwei Zufallsquellen geben dem Ensemble seinen Namen: das Ziehen von Bootstrap-Stichproben der Zeilen und die zufällige Auswahl von Features bei jedem Split.
library(ranger)
# Minimal random forest: 500 trees, auto mtry
rf <- ranger(
medv ~ .,
data = MASS::Boston,
num.trees = 500
)
print(rf)Der Parameter mtry
mtry gibt an, wie viele Features bei jedem Split zufällig berücksichtigt werden. Werden weniger Features als insgesamt vorhanden verwendet, werden die Bäume voneinander entkoppelt und die Varianz wird reduziert. Als Faustregel gilt mtry = sqrt(p) für Klassifikation und mtry = p/3 für Regression, wobei p die Anzahl der Prädiktoren ist.
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))OOB-Fehler — Validierung ohne Zusatzaufwand
Da jeder Baum auf einer Bootstrap-Stichprobe trainiert wird, bleibt ungefähr ein Drittel der Beobachtungen außen vor (out-of-bag, OOB). Diese OOB-Stichproben dienen für jeden Baum als integrierter Validierungsdatensatz. Der aggregierte OOB-Fehler ist eine nahezu unverzerrte Schätzung des Testfehlers — ein separater Validierungsdatensatz ist nicht erforderlich.
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)Variablenwichtigkeit
Mit importance = 'impurity' wird für jedes Feature die gesamte Abnahme der Knotenunreinheit (Gini oder MSE) über alle Bäume hinweg erfasst. Mit importance = 'permutation' wird der Genauigkeitsverlust gemessen, wenn jedes Feature zufällig permutiert wird — dieses Verfahren ist zuverlässiger, aber langsamer.
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')Vorhersagen mit ranger
Verwenden Sie predict(rf, data = test), um Vorhersagen zu erzeugen. Das Ergebnis ist eine Liste; mit $predictions greifen Sie auf die Vorhersagen zu. Bei der Klassifikation sind die Vorhersagen standardmäßig Faktorstufen.
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))Das Konzept der Konfusionsmatrix
Bei der Klassifikation stellt eine Konfusionsmatrix die tatsächlichen den vorhergesagten Klassen in einer Kreuztabelle gegenüber. Zu den daraus abgeleiteten wichtigen Kennzahlen gehören Genauigkeit, Precision (TP / (TP + FP)), Recall (TP / (TP + FN)) und der F1-Score. ranger stellt die OOB-Konfusionsmatrix direkt bereit.
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)mtry und num.trees abstimmen
Mehr Bäume reduzieren die Varianz immer weiter, bis etwa bei 300–500 Bäumen nur noch geringe zusätzliche Verbesserungen erreicht werden. Für den Parameter mtry gibt es einen optimalen Bereich. Eine einfache Abstimmungsschleife wertet den OOB-Fehler für ein Raster von mtry-Werten aus, um den optimalen Wert ohne Kreuzvalidierung zu finden.
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 für Klassifikation
Setzen Sie bei der Klassifikation probability = TRUE, um vorhergesagte Klassenwahrscheinlichkeiten statt fester Klassenlabels zu erhalten. Das ist für die Berechnung der ROC-Kurve und kalibrierter Wahrscheinlichkeitsschätzungen erforderlich und entspricht dem von yardstick-Metriken erwarteten Ausgabeformat.
# 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)Parallelisierung in ranger
ranger wurde auf Geschwindigkeit und Parallelisierung ausgelegt. Setzen Sie num.threads, um alle verfügbaren CPU-Kerne zu nutzen. Dies kann gegenüber dem älteren Paket randomForest zu erheblichen Geschwindigkeitssteigerungen führen, insbesondere bei großen Datensätzen mit vielen Bäumen.
# 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 über tidymodels
Sie können ranger über die tidymodels-Schnittstelle verwenden. Diese bietet eine einheitliche Syntax und lässt sich in Workflows, Kreuzvalidierung und Abstimmung integrieren. Geben Sie die Engine als 'ranger' an und übergeben Sie enginespezifische Argumente mit 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)Ausgabe von ranger interpretieren
Das ausgegebene ranger-Modell zeigt: die Anzahl der Bäume, die Zielvariable, die Anzahl der verwendeten Features, den OOB-Vorhersagefehler und bei Regression das R². Prüfen Sie den OOB-Fehler immer als schnellen Plausibilitätscheck — ist er bei einem großen Datensatz extrem niedrig, sollten Sie Datenlecks vermuten.
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')Kurztest
Was schätzt der OOB-Fehler (out-of-bag error) in einem mit ranger erstellten Random Forest?
Zusammenfassung: Random Forests
Die wichtigsten Erkenntnisse aus „Random Forests mit ranger“:
- Random Forests kombinieren viele Bäume, die auf Bootstrap-Stichproben mit zufälliger Feature-Auswahl bei jedem Split erstellt werden.
mtry: sqrt(p) für Klassifikation, p/3 für Regression; stimmen Sie diesen Parameter ab.- Der OOB-Fehler liefert eine kostenlose, nahezu unverzerrte Validierungsschätzung.
importance = 'impurity'oder'permutation'liefert Kennzahlen zur Variablenwichtigkeit.- Setzen Sie bei der Klassifikation
probability = TRUE, um Klassenwahrscheinlichkeiten auszugeben. - ranger ist stark parallelisiert; verwenden Sie
num.threadsfür große Datensätze. - Integrieren Sie ranger über
rand_forest() |> set_engine('ranger')in tidymodels.
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))Lerne R mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 43
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „Random Forests mit ranger“ kostenlos?
Ja — der vollständige Text von „Random Forests mit ranger“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Random Forests mit ranger“?
Trainieren Sie Random-Forest-Modelle, optimieren Sie mtry und ntrees und bewerten Sie den OOB-Fehler Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Random Forests mit ranger“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Entscheidungsbäume: Grundlage von Ensembles
- Random Forests mit ranger
- Gradient Boosting mit xgboost
- Feature-Wichtigkeit und Modellinterpretation