Menu
CoddyTech

Деревья задают вопросы

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

Эта глава завершается деревом, которое объясняет, как получить кредит на ферму. Дерево решений играет в игру «Двадцать вопросов»: задаёт по одному вопросу о признаке, на который можно ответить «да» или «нет», пока не будет получен ответ:

Диаграмма дерева. В верхнем блоке вопрос: ширина лепестка не более 0.8 см? Ответ «да» ведёт к setosa. Ответ «нет» ведёт ко второму блоку: длина лепестка не более 4.95 см? Ответ «да» ведёт к versicolor, ответ «нет» — к virginica

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

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(X_train, y_train)  # длина и ширина лепестка, см
print(tree.predict([[4.5, 1.4]]))

Это выводит [1], versicolor. max_depth=2 позволяет задать два вопроса на каждом пути. Масштабирование не требуется: каждый вопрос считывает один признак.

challenge icon

Задание

Средне

Магазин, сдающий камеры в аренду, отправляет сообщение-напоминание, если оборудование может вернуться с опозданием. Стартовый код разделяет данные о прошлых арендах и считывает новую аренду в таблицу из одной строки new_rental.

  1. Обучи дерево решений, в котором на каждом пути не более 2 вопросов (random_state=0).
  2. Выведи точность на тестовой выборке (3 знака после запятой) и прогноз для новой аренды: likely late для 1, likely on time для 0.

Для другого магазина:

Test accuracy: 0.792
This rental: likely on time

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

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Прошлые аренды: 1 в late означает, что оборудование вернули с опозданием
rentals = pd.read_csv("rentals.csv")
features = ["rental_weeks", "gear_value_usd", "customer_age", "late_before"]
X_train, X_test, y_train, y_test = train_test_split(rentals[features], rentals["late"], test_size=0.25, random_state=0)

# Новая аренда: количество забронированных недель, стоимость оборудования, возраст клиента и число его просроченных возвратов на данный момент
weeks = int(input())
value = int(input())
age = int(input())
late_before = int(input())
new_rental = pd.DataFrame([[weeks, value, age, late_before]], columns=features)

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

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

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

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