Menu
CoddyTech

Градиентный бустинг

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 43 из 58.

Лес выращивает деревья бок о бок. Градиентный бустинг выращивает их одно за другим: каждое новое дерево учится на том, в чём деревья до него всё ещё ошибаются.

Здесь он подбирает модель для продаж в баре смузи, дерево за деревом:

Серые точки показывают продажи смузи за 40 дней в зависимости от температуры: значения растут примерно от 20 до 135. Пунктирная линия после 1 дерева представляет собой грубую плоскую ступеньку, штриховая линия после 3 деревьев лучше соответствует данным, а сплошная линия после 15 деревьев проходит через точки

Для задач классификации используется модель 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 задаёт, какую долю каждого исправления сохранять. Маленькие шаги осторожны, поэтому для них нужно больше деревьев.

challenge icon

Задание

Средне

Выращиватель орхидей хочет знать, какие растения зацветут. Стартовый код разделяет данные из orchids.csv, оценивает лес и считывает количество деревьев.

  1. Для каждого значения из rates обучи модель бустинга с таким количеством деревьев (random_state=0) и выведи точность на тестовых данных.
  2. Выведи лучшее значение. При равенстве оставь более раннее.

Для другого выращивателя и значения 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

Затем попробуй несколько значений количества деревьев: при каком из них бустинг превосходит лес?

Попробуйте сами

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

# Орхидеи на полках цветовода: цвели в этом году (1) или нет (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]

# Не меняйте строки ниже: это случайный лес для сравнения
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(f"Forest: {forest.score(X_test, y_test):.3f}")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python