Menu
CoddyTech

Глубина дерева

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

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

Точность деревьев на обучающей и тестовой выборках при глубине от 1 до 12 на зашумлённых данных в форме полумесяца. Точность на обучающей выборке возрастает до 1.0 при глубине 8, что обозначено как запоминание. Точность на тестовой выборке достигает максимума 0.907 при глубине 6, отмеченном пунктирной линией, а затем падает примерно до 0.87

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

train = []
test = []
for d in range(1, 13):
    tree = DecisionTreeClassifier(max_depth=d, random_state=0)
    tree.fit(X_train, y_train)
    train.append(tree.score(X_train, y_train))
    test.append(tree.score(X_test, y_test))

На этих лунах глубина 6 лучше всего подходит для новых строк: пока оставим её. При глубине 8 дерево идеально работает на запомненных строках и хуже — на остальных.

challenge icon

Задание

Средне

Обзор неба с помощью телескопа распределяет небесные объекты на звёзды и галактики. Стартовый код разделяет их и настраивает график.

  1. Для каждой глубины из depths обучи дерево (random_state=0) и сохрани обе точности.
  2. Выведи глубину с наилучшей точностью на тестовых данных, как показано ниже.
  3. Построй обе линии с метками train и test, отметь наилучшую глубину пунктирной линией ax.axvline, добавь легенду и покажи график.

Для сортировщика манго:

Best depth: 5, test accuracy 0.867

Затем Coddy опишет твой график. У него он выглядит так:

График с заголовком «Спелый или нет?»: глубина дерева от 1 до 10 по горизонтали; синяя линия train поднимается примерно до 0,98, оранжевая линия test достигает пика около 0,87 при глубине 5, где проходит пунктирная вертикальная линия; есть легенда

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

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Одна строка для каждого небесного объекта в данных телескопического обзора: 1 в galaxy означает галактику, 0 — звезду
sky = pd.read_csv("sky.csv")
features = ["brightness_mag", "size_arcsec", "roundness", "color_index"]
X_train, X_test, y_train, y_test = train_test_split(sky[features], sky["galaxy"], test_size=0.25, random_state=0)
depths = range(1, 11)

fig, ax = plt.subplots()
ax.set_title("Star or Galaxy?")
ax.set_xlabel("Tree depth")
ax.set_ylabel("Accuracy")

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

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

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

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