Gradient boosting za pomocą xgboost
Konfiguruj parametry xgboost, wczesne zatrzymywanie i harmonogramy współczynnika uczenia.
Gradient boosting za pomocą xgboost to bezpłatna lekcja R Academy na CoddyKit. To lekcja 3 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 gradient boosting?
Gradient boosting buduje zespół sekwencyjnie. Każde nowe drzewo koryguje resztowe błędy poprzedniego zespołu, dopasowując się do ujemnego gradientu funkcji straty. W przeciwieństwie do lasów losowych, w których drzewa powstają równolegle, boosting buduje je jedno po drugim, a każde uczy się na błędach poprzedniego.
library(xgboost)
# XGBoost expects data in a special matrix format
# We'll build a simple example step by step
cat('XGBoost version:', packageVersion('xgboost'))
# Key concept: each tree reduces the ensemble error
# Final prediction = sum of all tree predictionsxgb.DMatrix()
xgb.DMatrix(data, label) to zoptymalizowany wewnętrzny format danych XGBoost. Przechowuje macierz cech i wektor etykiet razem, umożliwiając szybką i oszczędną pamięciowo pracę. Przed trenowaniem zawsze konwertuj dane do formatu DMatrix.
library(xgboost)
library(MASS)
X_train <- as.matrix(Boston[1:400, -14]) # features
y_train <- Boston[1:400, 14] # medv (target)
X_test <- as.matrix(Boston[401:506, -14])
y_test <- Boston[401:506, 14]
dtrain <- xgb.DMatrix(data = X_train, label = y_train)
dtest <- xgb.DMatrix(data = X_test, label = y_test)
cat('DMatrix rows:', nrow(dtrain))xgboost() — podstawowe trenowanie
xgboost(data, nrounds, eta, max_depth, objective) trenuje model. Najważniejsze parametry to: eta (współczynnik uczenia — mniejszy oznacza większą odporność, ale wolniejsze uczenie), max_depth (głębokość drzewa, która kontroluje złożoność modelu) oraz nrounds (liczba drzew).
params <- list(
objective = 'reg:squarederror',
eta = 0.1, # learning rate
max_depth = 6, # tree depth
subsample = 0.8, # row subsampling
colsample_bytree = 0.8 # column subsampling
)
set.seed(42)
model <- xgboost(
data = dtrain,
params = params,
nrounds = 100,
verbose = 0
)
cat('Model trained with', model$niter, 'rounds')Watchlist — monitorowanie straty walidacyjnej
Argument watchlist przyjmuje nazwaną listę obiektów DMatrix. XGBoost ocenia i wyświetla stratę dla każdego wymienionego zbioru po każdej rundzie boostingu. Użyj go do śledzenia straty treningowej i walidacyjnej oraz wykrywania początku przeuczenia.
watchlist <- list(train = dtrain, eval = dtest)
model <- xgb.train(
params = params,
data = dtrain,
nrounds = 200,
watchlist = watchlist,
verbose = 1
)
# The log shows train-rmse and eval-rmse per round
# Watch for eval-rmse increasing (overfitting signal)early_stopping_rounds
early_stopping_rounds = 20 zatrzymuje trenowanie, jeśli miara walidacyjna nie poprawiła się przez 20 kolejnych rund. Pozwala to automatycznie znaleźć optymalną liczbę drzew i uniknąć zarówno niedouczenia, jak i przeuczenia bez wyczerpującego ręcznego strojenia.
model <- xgb.train(
params = params,
data = dtrain,
nrounds = 1000, # max rounds
watchlist = list(train = dtrain, eval = dtest),
early_stopping_rounds = 20, # stop if no improvement
print_every_n = 50,
verbose = 1
)
cat('Best iteration:', model$best_iteration)
cat('Best eval RMSE:', model$best_score)Klasyfikacja binarna
W klasyfikacji binarnej użyj objective = 'binary:logistic', które zwraca przewidywane prawdopodobieństwa. Etykieta musi być liczbą 0/1. Model należy oceniać za pomocą AUC lub log-loss, używając parametru eval_metric.
# Binary classification example
library(MASS)
Pima <- MASS::Pima.tr
X_cl <- as.matrix(Pima[, -8])
y_cl <- as.numeric(Pima$type) - 1 # factor to 0/1
dt_cl <- xgb.DMatrix(data = X_cl, label = y_cl)
mod_cl <- xgboost(
data = dt_cl,
objective = 'binary:logistic',
eval_metric = 'auc',
eta = 0.05,
max_depth = 4,
nrounds = 100,
verbose = 0
)Predykcje
predict(model, dtest) zwraca surowe przewidywane wartości — prawdopodobieństwa w klasyfikacji lub predykcje rzeczywiste w regresji. W zadaniach klasyfikacyjnych zastosuj próg 0,5, aby przekształcić prawdopodobieństwa w etykiety klas.
# Regression predictions
reg_preds <- predict(model, dtest)
rmse <- sqrt(mean((reg_preds - y_test)^2))
cat('Test RMSE:', round(rmse, 3))
# Classification predictions
prob_preds <- predict(mod_cl, dt_cl)
class_preds <- ifelse(prob_preds > 0.5, 1, 0)
accuracy <- mean(class_preds == y_cl)
cat('Training Accuracy:', round(accuracy, 3))xgb.cv() — walidacja krzyżowa
xgb.cv(params, data, nrounds, nfold) wykonuje walidację krzyżową k-fold wewnątrz XGBoost. Jest to szybsze niż użycie rsample, ponieważ XGBoost obsługuje podział na foldy wewnętrznie. Wynik pokazuje średnią i odchylenie standardowe miary dla każdej rundy.
cv_result <- xgb.cv(
params = params,
data = dtrain,
nrounds = 200,
nfold = 5,
early_stopping_rounds = 15,
print_every_n = 20,
verbose = 1
)
# Best nrounds from CV
best_nrounds <- cv_result$best_iteration
cat('Optimal nrounds:', best_nrounds)
# CV RMSE at best iteration
cat('CV RMSE:', cv_result$evaluation_log[best_nrounds, 'test_rmse_mean'][[1]])Najważniejsze hiperparametry
Najbardziej wpływowe hiperparametry XGBoost:
eta: współczynnik uczenia (0.01–0.3). Mniejsza wartość oznacza potrzebę użycia większej liczby drzew i większą odporność.max_depth: głębokość drzewa (3–10). Większa wartość oznacza większą złożoność i szybsze przeuczenie.subsample: ułamek wierszy przypadających na drzewo (0.5–1.0). Ogranicza przeuczenie.colsample_bytree: ułamek cech przypadających na drzewo (0.5–1.0).lambda: regularyzacja L2 wag liści.alpha: regularyzacja L1 wag liści.
params_tuned <- list(
objective = 'reg:squarederror',
eta = 0.05,
max_depth = 5,
subsample = 0.75,
colsample_bytree = 0.75,
lambda = 1.0, # L2 regularization
alpha = 0.1, # L1 regularization
min_child_weight = 3 # min samples in leaf
)
model_tuned <- xgboost(
data = dtrain, params = params_tuned,
nrounds = best_nrounds, verbose = 0
)Zapisywanie i wczytywanie modeli
Modele XGBoost można zapisywać na dysku w formacie binarnym za pomocą xgb.save(model, 'model.xgb') i wczytywać ponownie za pomocą xgb.load('model.xgb'). Jest to zalecany format wdrażania produkcyjnego, który zapewnia reprodukowalność bit po bicie.
# Save model
xgb.save(model, '/tmp/xgb_boston.xgb')
# Reload and predict
loaded_model <- xgb.load('/tmp/xgb_boston.xgb')
new_preds <- predict(loaded_model, dtest)
# Verify predictions match
all.equal(reg_preds, new_preds) # TRUEKlasyfikacja wieloklasowa
W przypadku problemów wieloklasowych użyj objective = 'multi:softprob' i ustaw num_class na liczbę klas. Etykiety muszą być indeksowanymi od zera liczbami całkowitymi. Wynikiem jest macierz prawdopodobieństw dla każdej klasy.
X_mc <- as.matrix(iris[, -5])
y_mc <- as.integer(iris$Species) - 1 # 0, 1, 2
dt_mc <- xgb.DMatrix(data = X_mc, label = y_mc)
params_mc <- list(
objective = 'multi:softprob',
num_class = 3,
eta = 0.1,
max_depth = 3
)
mod_mc <- xgboost(
data = dt_mc, params = params_mc,
nrounds = 50, verbose = 0
)
# Predictions: matrix of shape (n, num_class)
prob_matrix <- matrix(predict(mod_mc, dt_mc), ncol = 3, byrow = TRUE)
head(prob_matrix)Szybkie sprawdzenie
Jaki jest cel ustawienia early_stopping_rounds = 20 w xgb.train()?
Podsumowanie XGBoost
Najważniejsze informacje z lekcji „Gradient boosting z XGBoost”:
xgb.DMatrix(data, label)tworzy zoptymalizowany format danych XGBoost.- Najważniejsze parametry to:
eta(współczynnik uczenia),max_depth,subsampleorazcolsample_bytree. watchlistmonitoruje stratę treningową i walidacyjną w każdej rundzie.early_stopping_roundsautomatycznie znajduje optymalną liczbę drzew.xgb.cv()wykonuje walidację krzyżową k-fold wewnątrz XGBoost, umożliwiając szybkie wyszukiwanie hiperparametrów.- Użyj
objective = 'binary:logistic'dla klasyfikacji binarnej oraz'multi:softprob'dla wieloklasowej. - Zapisuj i wczytuj modele za pomocą
xgb.save()/xgb.load().
# Production XGBoost pipeline
dtrain <- xgb.DMatrix(data = X_train, label = y_train)
dtest <- xgb.DMatrix(data = X_test, label = y_test)
params <- list(objective = 'reg:squarederror',
eta = 0.05, max_depth = 5, subsample = 0.8)
cv <- xgb.cv(params, dtrain, nrounds = 500, nfold = 5,
early_stopping_rounds = 20, verbose = 0)
model <- xgboost(data = dtrain, params = params,
nrounds = cv$best_iteration, verbose = 0)
preds <- predict(model, dtest)
cat('RMSE:', sqrt(mean((preds - y_test)^2)))Często zadawane pytania
Czy lekcja „Gradient boosting za pomocą xgboost” jest bezpłatna?
Tak — pełny tekst „Gradient boosting za pomocą xgboost” 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 „Gradient boosting za pomocą xgboost”?
Konfiguruj parametry xgboost, wczesne zatrzymywanie i harmonogramy współczynnika uczenia. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Gradient boosting za pomocą xgboost”?
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