Zacznij terazZacznij za darmo

Znajdź optymalną liczbę drzew dla modelu gradient boosting

W tym ćwiczeniu przygotujesz się do zbudowania modelu gradient boosting, który przewiduje liczbę wypożyczonych rowerów w ciągu godziny na podstawie warunków pogodowych oraz pory i rodzaju dnia. Model wytrenujesz na danych z lipca.

Dane z lipca zostały wcześniej wczytane. Pamiętaj, że bikesJuly.treat nie zawiera już kolumny z wartościami docelowymi – pobierz ją z oryginalnych danych: bikesJuly$cnt.

Do dopasowania modelu użyjesz pakietu xgboost. Funkcja xgb.cv() (dokumentacja) stosuje kroswalidację do oszacowania błędu uczenia poza próbą po dodaniu każdego kolejnego drzewa. Optymalna liczba drzew w końcowym modelu to ta, która minimalizuje RMSE na zbiorze walidacyjnym.

W tym ćwiczeniu najważniejsze argumenty wywołania xgb.cv() to:

  • data: macierz numeryczna.
  • label: wektor wartości docelowych (również numeryczny).
  • nrounds: maksymalna liczba rund (drzew do zbudowania).
  • nfold: liczba podziałów w kroswalidacji. Wartość 5 sprawdza się dobrze.
  • objective: "reg:squarederror" dla zmiennych ciągłych.
  • eta: współczynnik uczenia.
  • max_depth: maksymalna głębokość drzew.
  • early_stopping_rounds: zatrzymaj uczenie po tej liczbie rund bez poprawy wyników.
  • verbose: FALSE, aby wyłączyć komunikaty.

To ćwiczenie jest częścią kursu

Nadzorowane uczenie maszynowe w R: regresja

Zobacz kurs

Instrukcje do ćwiczenia

  • Uzupełnij luki, aby uruchomić xgb.cv() na przetworzonych danych treningowych; wynik przypisz do zmiennej cv.
    • Użyj as.matrix(), aby przekształcić przetworzoną ramkę danych na macierz.
    • Użyj 50 rund i 5-krotnej kroswalidacji.
    • Ustaw early_stopping_rounds na 5.
    • Ustaw eta na 0.75, a max_depth na 5.
  • Pobierz ramkę danych evaluation_log z obiektu cv i przypisz ją do zmiennej elog. Każdy wiersz evaluation_log odpowiada jednemu dodatkowego drzewu, więc numer wiersza wskazuje liczbę drzew w modelu.
  • Uzupełnij luki, aby znaleźć liczbę drzew minimalizującą wartości kolumn train_rmse_mean i test_rmse_mean.
    • Funkcja which.min() (dokumentacja) zwraca indeks minimalnej wartości w wektorze.
    • Ile drzew jest potrzebnych?

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# Run xgb.cv
cv <- xgb.cv(data = ____, 
            label = ___,
            nrounds = ___,
            nfold = ___,
            objective = "reg:squarederror",
            eta = ___,
            max_depth = ___,
            early_stopping_rounds = ___,
            verbose = FALSE   # silent
)

# Get the evaluation log 
elog <- ___

# Determine and print how many trees minimize training and test error
elog %>% 
   summarize(ntrees.train = ___,   # find the index of min(train_rmse_mean)
             ntrees.test  = ___)   # find the index of min(test_rmse_mean)
Edytuj i uruchom kod