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
Instrukcje do ćwiczenia
- Uzupełnij luki, aby uruchomić
xgb.cv()na przetworzonych danych treningowych; wynik przypisz do zmiennejcv.- Użyj
as.matrix(), aby przekształcić przetworzoną ramkę danych na macierz. - Użyj 50 rund i 5-krotnej kroswalidacji.
- Ustaw
early_stopping_roundsna 5. - Ustaw
etana 0.75, amax_depthna 5.
- Użyj
- Pobierz ramkę danych
evaluation_logz obiektucvi przypisz ją do zmiennejelog. Każdy wierszevaluation_logodpowiada 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_meanitest_rmse_mean.- Funkcja
which.min()(dokumentacja) zwraca indeks minimalnej wartości w wektorze. - Ile drzew jest potrzebnych?
- Funkcja
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)