Введение в ML: Деревья Решений (Decision Trees)
Цель: Изучить работу алгоритма Decision Tree. Мы увидим своими глазами, как дерево принимает решения, визуализируем его структуру, намеренно добьемся переобучения (Overfitting) и научимся бороться с ним с помощью "стрижки" (Pruning).
Инструменты:
sklearn.tree: DecisionTreeClassifier, plot_tree.graphviz(опционально, но мы будем использовать встроенный plot_tree).matplotlib: для отрисовки границ решений.
Данные: Wine Dataset (Встроенный в sklearn). Классификация вин на 3 сорта по химическому составу (алкоголь, магний, флавоноиды и т.д.).
Часть 1: Загрузка и Подготовка
Особенность деревьев
Деревьям решений не нужно масштабирование данных (StandardScaler). Дерево просто ищет порог (например, Alcohol <= 13), и ему совершенно неважно, в каких единицах и масштабах измерены данные.
Задание 1.1: Загрузка данных
- Загрузите датасет
load_wine. - Создайте DataFrame
Xи Seriesy. - Разделите на Train/Test (70/30,
random_state=42).
Часть 2: "Дикое" дерево (Overfitting)
Если не ограничивать дерево, оно будет расти до тех пор, пока в каждом листе не окажется "чистый" класс. Это приводит к идеальной точности на Train, но сложной, переобученной структуре.
Задание 2.1:
- Создайте
DecisionTreeClassifierбез параметров (оставьтеrandom_state=42). - Обучите на Train.
- Посчитайте Accuracy для Train и Test.
Часть 3: Регуляризация (Pruning)
Теперь мы "подстрижем" дерево, ограничив его глубину. Это упростит модель и, возможно, улучшит метрики на тесте (или хотя бы сократит разрыв между train и test).
Задание 3.1: Подбор гиперпараметров
- Создайте новую модель с ограничениями:
max_depth=3(не глубже 3 уровней).min_samples_leaf=5(минимум 5 объектов в листе).
- Обучите и сравните метрики.
Задание 3.2: Визуализация компактного дерева
Посмотрите, насколько понятнее стала логика принятия решений.
Часть 4: Важность признаков (Feature Importance)
Деревья позволяют легко понять, какие признаки самые важные. Чем выше признак находится в дереве (ближе к корню), тем лучше он разделяет данные.
Задание 4.1: Feature Importance Plot
Извлеките атрибут feature_importances_ из обученной модели (tree_pruned) и постройте Barplot.
Часть 5: Границы решений (Decision Boundary)
Чтобы понять геометрический смысл "нарезания пространства", обучим дерево только на ДВУХ признаках и нарисуем карту решений.
Задание 5.1: 2D Визуализация
Мы возьмем два самых важных признака (из предыдущего пункта, скорее всего это proline и od280/od315_of_diluted_wines или flavanoids).
Ключевое наблюдение
Обратите внимание: границы всегда параллельны осям. Это фундаментальная геометрическая особенность деревьев решений, так как они строят правила вида "x > порог".