0Pricing
R Academy · Lekcja

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 predictions

xgb.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)  # TRUE

Klasyfikacja 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, subsample oraz colsample_bytree.
  • watchlist monitoruje stratę treningową i walidacyjną w każdej rundzie.
  • early_stopping_rounds automatycznie 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

  1. Drzewa decyzyjne: podstawa metod ensemble
  2. Lasy losowe za pomocą ranger
  3. Gradient boosting za pomocą xgboost
  4. Ważność cech i interpretacja modeli
← Powrót do R Academy