Menu
CoddyTech

Важность признаков

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

На какие признаки опирается дерево? feature_importances_ показывает долю каждого признака в сортировке, которую выполняли его вопросы, а сумма долей равна 1:

Горизонтальные столбцы для дерева ирисов глубины 3: ширина лепестка 0.58, длина лепестка 0.42, ширина чашелистика 0.00, длина чашелистика 0.00

После сортировки в Series они образуют ранжированную диаграмму. ax.barh рисует столбцы горизонтально, поэтому длинные названия помещаются:

imp = pd.Series(tree.feature_importances_, index=iris.feature_names).sort_values()
ax.barh(imp.index, imp.values)

0 означает, что дерево ни разу не спрашивало об этом признаке. Чашелистики всё ещё могут иметь значение: лепестки уже рассказали дереву, какими они будут.

challenge icon

Задание

Средне

Школа сёрфинга хочет узнать, что помогает новичкам вставать на доску в течение первой недели. Программа считывает глубину; стартовый код обучает дерево такой глубины и настраивает график.

  1. Помести важности признаков в Series, названный по признаку, начиная с наименьшей важности.
  2. Выведи самый важный признак (3 знака после запятой) и признаки, о которых программа никогда не спрашивала, как показано ниже.
  3. Изобрази их в виде горизонтальных столбцов и покажи график.

Для школы плавания:

Top feature: pool_hours (0.612)
Never asked: ['goggles']

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

Горизонтальные столбцы с заголовком «Что помогает пловцам пройти обучение?», самый большой столбец сверху: pool_hours — около 0.61, can_float — 0.21, age — 0.10, lessons_per_week — 0.08, goggles — 0

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

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

depth = int(input())

# Одна строка на каждого новичка: 1 в standing означает, что он встал на доску в течение первой недели
surf = pd.read_csv("surfschool.csv")
features = ["age", "fitness", "days_surfed", "skated_before", "lesson_hours", "wetsuit_fit"]
X_train, X_test, y_train, y_test = train_test_split(surf[features], surf["standing"], test_size=0.25, random_state=0)
tree = DecisionTreeClassifier(max_depth=depth, random_state=0)
tree.fit(X_train, y_train)

fig, ax = plt.subplots(layout="constrained")  # оставляет место для длинных названий
ax.set_title("What Gets Beginners Standing?")
ax.set_xlabel("Importance")

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

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

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

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