Lasy losowe za pomocą ranger
Trenuj modele lasów losowych, dostrajaj mtry i ntrees oraz oceniaj błąd OOB.
Lasy losowe za pomocą ranger to bezpłatna lekcja R Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.
Czym jest las losowy?
Las losowy buduje wiele drzew decyzyjnych na próbkach bootstrapowych danych, a następnie uśrednia ich predykcje (w regresji) lub wybiera klasę na podstawie głosowania większościowego (w klasyfikacji). Nazwa metody wynika z dwóch źródeł losowości: próbkowania bootstrapowego wierszy oraz losowego wyboru cech przy każdym podziale.
library(ranger)
# Minimal random forest: 500 trees, auto mtry
rf <- ranger(
medv ~ .,
data = MASS::Boston,
num.trees = 500
)
print(rf)Parametr mtry
mtry to liczba cech losowo rozważanych przy każdym podziale. Użycie mniejszej liczby cech niż ich całkowita liczba zmniejsza korelację między drzewami, ograniczając wariancję. Przyjmuje się orientacyjnie mtry = sqrt(p) dla klasyfikacji oraz mtry = p/3 dla regresji, gdzie p oznacza liczbę predyktorów.
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))Błąd OOB — walidacja bez dodatkowych kosztów
Ponieważ każde drzewo jest trenowane na próbce bootstrapowej, mniej więcej jedna trzecia obserwacji pozostaje poza próbką (out-of-bag, OOB). Te próbki OOB pełnią funkcję wbudowanego zbioru walidacyjnego dla każdego drzewa. Łączny błąd OOB jest niemal nieobciążonym oszacowaniem błędu testowego — nie jest potrzebny oddzielny zbiór walidacyjny.
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)Ważność zmiennych
Ustawienie importance = 'impurity' zapisuje całkowity spadek nieczystości węzłów (Gini lub MSE) dla każdej cechy we wszystkich drzewach. Ustawienie importance = 'permutation' mierzy spadek accuracy po losowym przetasowaniu każdej cechy — jest to bardziej wiarygodne, ale wolniejsze.
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')Predykcje za pomocą ranger
Użyj predict(rf, data = test), aby wygenerować predykcje. Wynik jest listą; predykcje można uzyskać za pomocą $predictions. W klasyfikacji predykcje są domyślnie poziomami 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))Pojęcie macierzy pomyłek
W klasyfikacji macierz pomyłek zestawia ze sobą klasy rzeczywiste i przewidywane. Najważniejsze miary wyprowadzane z tej macierzy to accuracy, precision (TP / (TP + FP)), recall (TP / (TP + FN)) oraz wynik F1. ranger udostępnia bezpośrednio macierz pomyłek 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)Strojenie mtry i num.trees
Większa liczba drzew zawsze zmniejsza wariancję, aż do uzyskania malejących korzyści przy około 300–500 drzewach. Parametr mtry ma optymalny zakres wartości. Prosta pętla strojenia ocenia błąd OOB dla siatki wartości mtry, aby znaleźć wartość optymalną bez walidacji krzyżowej.
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 w klasyfikacji
W klasyfikacji ustaw probability = TRUE, aby uzyskać predykcje prawdopodobieństwa klas zamiast etykiet. Jest to konieczne do obliczania krzywej ROC i uzyskiwania skalibrowanych estymat prawdopodobieństwa, a także zapewnia format danych oczekiwany przez miary pakietu 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)Równoległość w ranger
ranger został zaprojektowany z myślą o szybkości i przetwarzaniu równoległym. Ustaw num.threads, aby wykorzystać wszystkie dostępne rdzenie procesora. Może to zapewnić znaczące przyspieszenie w porównaniu ze starszym pakietem randomForest, szczególnie w przypadku dużych zbiorów danych i wielu drzew.
# 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 za pośrednictwem tidymodels
Możesz używać ranger za pośrednictwem interfejsu tidymodels, który zapewnia spójną składnię oraz integrację z workflow, walidacją krzyżową i strojeniem. Określ silnik jako 'ranger' i przekaż argumenty właściwe dla silnika za pomocą 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)Interpretacja wyników ranger
Wydrukowany model ranger pokazuje: liczbę drzew, zmienną docelową, liczbę użytych cech, błąd predykcji OOB oraz R-kwadrat (w regresji). Zawsze sprawdzaj błąd OOB jako szybki test poprawności — jeśli jest wyjątkowo niski dla dużego zbioru danych, podejrzewaj wyciek danych.
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')Szybkie sprawdzenie
Co szacuje błąd OOB (out-of-bag) w lesie losowym zbudowanym za pomocą ranger?
Podsumowanie lasów losowych
Najważniejsze informacje z lekcji „Lasy losowe z ranger”:
- Lasy losowe łączą wiele drzew budowanych na próbkach bootstrapowych z losowym wyborem cech przy każdym podziale.
mtry: sqrt(p) dla klasyfikacji i p/3 dla regresji; ten parametr należy dostroić.- Błąd OOB zapewnia bezpłatne, niemal nieobciążone oszacowanie walidacyjne.
importance = 'impurity'lub'permutation'dostarcza wyników ważności zmiennych.- Ustaw
probability = TRUE, aby uzyskać prawdopodobieństwa klas w klasyfikacji. - ranger jest wysoce równoległy; w przypadku dużych zbiorów danych użyj
num.threads. - Zintegruj go z tidymodels za pomocą
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))Często zadawane pytania
Czy lekcja „Lasy losowe za pomocą ranger” jest bezpłatna?
Tak — pełny tekst „Lasy losowe za pomocą ranger” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Lasy losowe za pomocą ranger”?
Trenuj modele lasów losowych, dostrajaj mtry i ntrees oraz oceniaj błąd OOB. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć R Academy?
Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Lasy losowe za pomocą ranger”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?
Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Drzewa decyzyjne: podstawa metod ensemble
- Lasy losowe za pomocą ranger
- Gradient boosting za pomocą xgboost
- Ważność cech i interpretacja modeli