Важность признаков
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 30 из 58.
На какие признаки опирается дерево? feature_importances_ показывает долю каждого признака в сортировке, которую выполняли его вопросы, а сумма долей равна 1:
После сортировки в Series они образуют ранжированную диаграмму. ax.barh рисует столбцы горизонтально, поэтому длинные названия помещаются:
imp = pd.Series(tree.feature_importances_, index=iris.feature_names).sort_values()
ax.barh(imp.index, imp.values)0 означает, что дерево ни разу не спрашивало об этом признаке. Чашелистики всё ещё могут иметь значение: лепестки уже рассказали дереву, какими они будут.
Задание
СреднеШкола сёрфинга хочет узнать, что помогает новичкам вставать на доску в течение первой недели. Программа считывает глубину; стартовый код обучает дерево такой глубины и настраивает график.
- Помести важности признаков в Series, названный по признаку, начиная с наименьшей важности.
- Выведи самый важный признак (3 знака после запятой) и признаки, о которых программа никогда не спрашивала, как показано ниже.
- Изобрази их в виде горизонтальных столбцов и покажи график.
Для школы плавания:
Top feature: pool_hours (0.612)
Never asked: ['goggles']Затем Coddy опишет твой график. Их график выглядит так:
Попробуйте сами
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")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск модели3Линейная регрессия
Предсказание чиселНесколько признаковОценка ошибокГрафики остатковПовторение: прокат велосипедов6Деревья решений
Деревья задают вопросыКак читать деревоГлубина дереваВажность признаковПовторение: решения по кредитамПотренируйтесь самостоятельно: Онлайн-компилятор Python