Menu
CoddyTech

Почему работают леса

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

Деревья леса намеренно различаются. Каждое обучается на бутстрэп-выборке: строки случайным образом выбираются с возвращением, поэтому некоторые повторяются, а некоторые пропускаются.

Каждое дерево также выбирает несколько случайных признаков. Деревья допускают разные ошибки, а голосование их компенсирует. Два вида светлячков:

Две диаграммы с 150 светлячками: длительность вспышки отложена по горизонтали, пауза — по вертикали; синие кружки обозначают один вид, а красные треугольники — другой. Слева — одно дерево: его граница образует тонкие полосы, тянущиеся к отдельным светлячкам. Справа — лес из 100 деревьев: одна плавная граница между группами

Лес сохраняет участок только там, где согласно большинство деревьев.

Деревья хранятся в forest.estimators_:

third = forest.estimators_[2]
print(round(third.score(X_test, y_test), 3))

Это выводит 0.737. Весь лес получает оценку 0.895.

challenge icon

Задание

Средне

Побеждает ли лес собственные деревья? В стартовом коде модель forest обучается на данных riders.csv — о велосипедистах, которые завершили или не завершили заезд на 160 км менее чем за 6 часов, — и настраивается диаграмма.

  1. Оцени каждое дерево в лесу на тестовых строках.
  2. Построй гистограмму оценок с параметром bins=10 и отметь forest_acc красной вертикальной линией.
  3. Выведи количество деревьев, которые побеждает лес.

Для другого заезда было выведено The forest beats 88 of its 100 trees и построена такая диаграмма:

Гистограмма с заголовком The Forest and Its Trees: точность деревьев на тестовых данных — примерно от 0.53 до 0.85, большинство значений около 0.70, красная вертикальная линия около 0.77, правее большей части столбцов

Затем Coddy описывает твою диаграмму.

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

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Участники благотворительного велозаезда на 160 км: финишировали менее чем за 6 часов (1) или нет (0)
riders = pd.read_csv("riders.csv")
features = ["weekly_km", "long_ride_km", "age", "years_riding", "rest_days", "sleep_hours"]
X = riders[features].to_numpy()  # обычный массив — формат, который ожидают деревья случайного леса
y = riders["under_6h"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
forest_acc = forest.score(X_test, y_test)

fig, ax = plt.subplots()
ax.set_title("The Forest and Its Trees")
ax.set_xlabel("Test accuracy")
ax.set_ylabel("Trees")

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

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

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

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