Menu
CoddyTech

Как читать дерево

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

Вопросы дерева понятны, поэтому ты можешь проверить, чему оно научилось. Проследи путь цветка длиной 5.1 см и шириной 1.6 см по дереву ирисов:

Дерево ирисов в виде блоков, один путь подсвечен оранжевым: ширина лепестка 0.80 или меньше? Нет, 1.6. Длина лепестка 4.95 или меньше? Нет, 5.1. Путь заканчивается классом 2

export_text выводит те же вопросы в виде текста, с одним отступом на каждый уровень:

from sklearn.tree import export_text

print(export_text(tree, feature_names=["petal_length", "petal_width"]))

Это выводит:

|--- petal_width <= 0.80
|   |--- class: 0
|--- petal_width >  0.80
|   |--- petal_length <= 4.95
|   |   |--- class: 1
|   |--- petal_length >  4.95
|   |   |--- class: 2

Каждая строка отвечает только на вопросы по своему пути. Класс 2 — virginica, разумный ответ для длинных и широких лепестков.

challenge icon

Задание

Средне

Дерево сырной лавки определяет сыр как свежий, мягкий или твёрдый по содержанию воды и сроку выдержки в неделях. Стартовый код обучает его и считывает данные о новом сыре.

  1. Выведи вопросы дерева с названиями признаков.
  2. Запусти программу, прочитай вопросы и дополни by_hand, чтобы функция задавала те же вопросы с помощью if/else и возвращала тот же ответ.

После вывода дерева, для сыра, который дерево определяет как мягкий:

By hand: soft
The tree: soft

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

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

# Одна строка для каждого сыра: содержание воды (%), срок созревания в неделях и его сорт
cheeses = pd.read_csv("cheeses.csv")
features = ["moisture_pct", "aged_weeks"]
X_train, X_test, y_train, y_test = train_test_split(cheeses[features], cheeses["cheese"], test_size=0.25, random_state=0)
tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(X_train, y_train)

# Новый сыр, сорт которого нужно определить
moisture = int(input())
aged = int(input())
new_cheese = pd.DataFrame([[moisture, aged]], columns=features)

# Напишите код ниже: выведите дерево, затем в by_hand дайте такой же ответ, как оно


def by_hand(moisture, aged):
    return "fresh"


# Не изменяйте строки ниже
print("By hand:", by_hand(moisture, aged))
print("The tree:", tree.predict(new_cheese)[0])
quiz iconПроверьте себя

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

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

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