- •Загрузка данных:
- •Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
- •Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
- •Оцените сбалансированность классов.
- •Проведите предобработку данных при необходимости.
- •Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Логистическая регрессия:
- •Метод опорных векторов:
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Решающие деревья:
- •Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
- •Выбор классификатора:
- •Постройте таблицу с метриками Precision, Recall, для полученных результатов каждым классификатором.
- •Сделайте выводы о том, какие классификаторы лучше всего подходят для вашего набора данных и почему.
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Сначала создается и обучается модель KNN, затем создаются границы графика и область принятия решений. Область принятия решений строится с помощью plt.contourf, а диаграмма с помощью plt.scatter. Добавляется легенда с названиями классов, подписи осей и сетка. Реализация приведена в Листинге 2.2.1. Диаграмма изображена на Рисунке 2.2.2.
Листинг 2.2.1 – Реализация построения диаграммы рассеяния с границами принятия решений
from matplotlib.colors import ListedColormap
knn = KNeighborsClassifier(n_neighbors=5, weights='uniform').fit(X_train, y_train)
x_min, x_max = X_scaled[:, 0].min() - 0.1, X_scaled[:, 0].max() + 0.1 y_min, y_max = X_scaled[:, 1].min() - 0.1, X_scaled[:, 1].max() + 0.1 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02)) Z = knn.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape)
plt.figure() plt.contourf(xx, yy, Z, alpha=0.5, cmap=ListedColormap(['#FFAAAA', '#AAFFAA'])) scatter = plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, cmap=ListedColormap(['#FF0000', '#00FF00']), edgecolor="black") plt.legend(*scatter.legend_elements(), title="Класс") plt.xlabel("X1") plt.ylabel("X2") plt.grid() plt.show() |
Рисунок 2.2.2 – Диаграмма рассеяния с границами принятия решений
Классы в основном имеют четкие границы областей. Наблюдается хорошая кластеризация: точки классов преимущественно расположены в своей цветовой зоне, но не везде. Исключением являются небольшое количество точек класса 1 в красной зоне и класса 0 в зеленой зоне, что может указывать на шум в данных, наложение распределений признаков.
Рассчитайте значения Precision, Recall, f1 для полученных результатов.
Для расчета значений будем использовать функцию classification_report из sklearn.metrics. Реализация представлена в Листинге 2.4.1. Результат представлен в Листинге 2.4.2.
Листинг 2.4.1 – Расчет значений Precision, Recall, F1
from sklearn.metrics import classification_report
y_pred = knn.predict(X_test) print(classification_report(y_test, y_pred, digits=4)) |
Листинг 2.4.2 – Результаты расчета
precision recall f1-score support
0 0.9667 0.9667 0.9667 60 1 0.9672 0.9672 0.9672 61
accuracy 0.9669 121 macro avg 0.9669 0.9669 0.9669 121 weighted avg 0.9669 0.9669 0.9669 121 |
Из результатов можно увидеть, что модель демонстрирует высокую точность с показателем accuracy равным 96.69%. Для обоих классов метрики Precision, Recall и F1-score практически идентичны и составляют около 96.7%, что указывает на сбалансированность модели и отсутствие перекоса в предсказаниях. Высокие значения Recall показывают, что модель правильно находит большинство объектов каждого класса, а близкие значения Precision говорят о минимальном количестве ошибочных предсказаний. Средние значения (macro avg и weighted avg) также находятся на уровне 96.69%, подтверждая сбалансированность модели и стабильность работы алгоритма для всех классов.
