- •Загрузка данных:
- •Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
- •Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
- •Оцените сбалансированность классов.
- •Проведите предобработку данных при необходимости.
- •Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Логистическая регрессия:
- •Метод опорных векторов:
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Решающие деревья:
- •Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
- •Выбор классификатора:
- •Постройте таблицу с метриками Precision, Recall, для полученных результатов каждым классификатором.
- •Сделайте выводы о том, какие классификаторы лучше всего подходят для вашего набора данных и почему.
Рассчитайте значения Precision, Recall, f1 для полученных результатов.
Расчет значений аналогичен п.2.4. Реализация представлена в Листинге 5.4.1. Результат представлен в Листинге 5.4.2.
Листинг 5.4.1 – Расчет значений Precision, Recall, F1
y_pred = tree.predict(X_test) print(classification_report(y_test, y_pred, digits=4)) |
Листинг 5.4.2 – Результаты расчета
precision recall f1-score support
0 0.9828 0.9500 0.9661 60 1 0.9524 0.9836 0.9677 61
accuracy 0.9669 121 macro avg 0.9676 0.9668 0.9669 121 weighted avg 0.9674 0.9669 0.9669 121 |
Из результатов можно увидеть, что решающее дерево с подобранными гиперпараметрами демонстрирует отличные результаты классификации с общей точностью 96.69%. Для класса 0 наблюдается высокая точность предсказаний (98.28%) при полноте 95%, а для класса 1 – немного иное соотношение: Precision 95.24% при Recall 98.36%. F1-score для обоих классов практически идентичен (96.61% и 96.77%), что свидетельствует о сбалансированности модели. Можно отметить, что дерево показывает разное поведение для классов: лучше "ловит" класс 1 (Recall 98.36%), но точнее предсказывает класс 0 (Precision 98.28%). Средние показатели (около 96.7%) соответствуют общей точности, подтверждая стабильность работы модели. Ограничение глубины и листьев предотвратили переобучение, сохранив при этом высокую предсказательную способность. Минимальное количество наблюдений в листе обеспечило статистическую значимость решений. Выбранный критерий gini оптимально подошел для данной задачи, позволив дереву достичь точности, сопоставимой с методом опорных векторов (96.69%), но с более простой структурой.
Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
Для построения дерева решений импортируем функцию plot_tree из библиотеки sklearn.tree. Передадим в функцию модель и параметр закрашивания. Реализация приведена в Листинге 5.6.1. График изображен на Рисунке 5.6.2.
Листинг 5.6.1 – Реализация построения дерева решений
from sklearn.tree import plot_tree
plt.figure() plot_tree(tree, filled=True) plt.show() |
Рисунок 5.2.2 – График дерева решений
Дерево решений строит иерархию правил, начиная с наиболее значимого признака (в данном случае, x[0]) в корне дерева. Можно видеть, что модель использует два признака: x[0] и x[1]. Признак x[0] используется для первичного разделения, а x[1] используется для дополнительного уточнения классов на следующих уровнях дерева.
В каждом узле происходит пороговое сравнение: например, в корене дерева x[0] ≤ -0.228. Эти пороги делят пространство признаков на области, где преобладает один из классов.
Критерий gini – это мера "загрязненности" узла. Чем ближе он к 0, тем чище узел (объекты одного класса). На каждом шаге дерево выбирает локально лучшее разбиение, а не глобально оптимальное.
В результате дерево формирует ступенчатую карту решений, где каждая такая ступень соответствует одному условию в узле дерева. Ось X1 (x[0]) создаёт серию вертикальных разрезов, задающих «столбцы» принятия решений. Ось X2 (x[1]) создаёт горизонтали, уточняющие классификацию внутри этих столбцов. Чем глубже узел, тем уже и локальнее соответствующая область на графике.
