Menu
CoddyTech

Boosting gradientowy

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 43 z 58.

Las rośnie, a drzewa rosną obok siebie. Gradient boosting tworzy je jedno po drugim: każde nowe drzewo uczy się, co poprzednie drzewa nadal robią źle.

W tym przypadku dopasowuje sprzedaż baru ze smoothie, drzewo po drzewie:

Szare kropki przedstawiające sprzedaż smoothie przez 40 dni w zależności od temperatury, rosnącą z około 20 do 135. Linia kropkowana po 1 drzewie to płaski, przybliżony stopień, linia przerywana po 3 drzewach lepiej dopasowuje się do danych, a linia ciągła po 15 drzewach przebiega przez kropki

W przypadku klas modelem jest GradientBoostingClassifier:

from sklearn.ensemble import GradientBoostingClassifier

boost = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=0)
boost.fit(X_train, y_train)

learning_rate określa, jak dużą część każdej poprawki zachować. Małe kroki są ostrożne, więc potrzeba więcej drzew.

challenge icon

Wyzwanie

Średni

Hodowca storczyków chce wiedzieć, które rośliny zakwitną. Kod początkowy dzieli dane z pliku orchids.csv, ocenia las i odczytuje liczbę drzew.

  1. Dla każdej wartości w rates wytrenuj model boostingowy z tą liczbą drzew (random_state=0) i wyświetl jego dokładność na zbiorze testowym.
  2. Wyświetl najlepszą wartość. W przypadku remisu pozostaw wcześniejszą.

Dla innego hodowcy i wartości 20:

Forest: 0.860
Boosting at rate 0.01: 0.600
Boosting at rate 0.1: 0.860
Boosting at rate 1.0: 0.900
Best rate for 20 trees: 1.0

Następnie wypróbuj kilka wartości liczby drzew: kiedy boosting osiąga lepszy wynik niż las?

Spróbuj swoich sił

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier

# Storczyki na półkach hodowcy: zakwitły w tym roku (1) lub nie (0)
orchids = pd.read_csv("orchids.csv")
X = orchids.drop(columns="bloomed")
y = orchids["bloomed"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())
rates = [0.01, 0.1, 1.0]

# Nie zmieniaj poniższych wierszy: model lasu do porównania
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(f"Forest: {forest.score(X_test, y_test):.3f}")

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online