- •Загрузка данных:
- •Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
- •Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
- •Оцените сбалансированность классов.
- •Проведите предобработку данных при необходимости.
- •Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Логистическая регрессия:
- •Метод опорных векторов:
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Решающие деревья:
- •Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
- •Выбор классификатора:
- •Постройте таблицу с метриками Precision, Recall, для полученных результатов каждым классификатором.
- •Сделайте выводы о том, какие классификаторы лучше всего подходят для вашего набора данных и почему.
Метод опорных векторов:
Проведите классификацию методом опорных векторах при различных параметрах ядра: “linear”, “poly” (нужно выбрать степень), “rbf”. Постройте столбчатую диаграмму зависимости точности (Accuracy) от вида ядра. Дальнейшие пункты 4.* выполняйте для лучшего параметра.
Построение аналогично п.3.1. Реализация приведена в Листинге 4.1.1. Диаграмма изображена на Рисунке 4.1.2.
Листинг 4.1.1 – Реализация построения столбчатой диаграммы точности в зависимости от параметров ядра
from sklearn.svm import SVC
kernels = { "linear": {"kernel": "linear"}, "poly": {"kernel": "poly", "degree": 3}, "rbf": {"kernel": "rbf"} }
accuracy_scores = {} for name, params in kernels.items(): model = SVC(**params).fit(X_train, y_train) y_pred = model.predict(X_test) accuracy_scores[name] = accuracy_score(y_test, y_pred)
plt.figure() plt.bar(accuracy_scores.keys(), accuracy_scores.values()) plt.ylabel('Accuracy') plt.show() |
Рисунок 4.1.2 – Диаграмма точности в зависимости от параметров ядра
Ядро rbf показало наилучшую точность, значит будем использовать его.
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Построение аналогично п.2.2. Реализация приведена в Листинге 4.2.1. Диаграмма изображена на Рисунке 4.2.2.
Листинг 4.2.1 – Реализация построения диаграммы рассеяния с границами принятия решений
svc = SVC(kernel='rbf').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 = svc.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() |
Рисунок 4.2.2 – Диаграмма рассеяния с границами принятия решений
Классы в основном имеют четкие границы областей. Большинство точек классов расположены в своей цветовой зоне, но не везде. Также как и в KNN небольшое количество точек класса 1 в красной зоне и класса 0 в зеленой зоне. Ошибки классификации может возникнуть из-за мест, где классы сильно перекрываются. В целом rbf-ядро хорошо захватывает сложную форму границы между классами.
Рассчитайте значения Precision, Recall, f1 для полученных результатов.
Расчет значений аналогичен п.2.4. Реализация представлена в Листинге 4.4.1. Результат представлен в Листинге 4.4.2.
Листинг 4.4.1 – Расчет значений Precision, Recall, F1
y_pred = svc.predict(X_test) print(classification_report(y_test, y_pred, digits=4)) |
Листинг 4.4.2 – Результаты расчета
precision recall f1-score support
0 0.9516 0.9833 0.9672 60 1 0.9831 0.9508 0.9667 61
accuracy 0.9669 121 macro avg 0.9673 0.9671 0.9669 121 weighted avg 0.9675 0.9669 0.9669 121 |
Из результатов можно увидеть, что модель SVM с brf-ядром показывает отличные результаты классификации с общей точностью 96.69%. У класса 0: Precision равный 95.16% показывает, что из всех предсказанных классов 0 верны 95.16%. Recall равный 98.33% показывает, что модель находит 98.33% истинных классов 0. У класса 1: Precision равный 98.31% показывает, что из всех предсказанных классов 1 верны 98.31%. Recall равный 95.08% показывает, что модель находит 95.08% истинных классов 1. Значение F1 для обоих классов стабильно высокое (около 96.7%), что свидетельствует об оптимальном балансе между точностью и полнотой предсказаний. Средние показатели (около 96.7%) полностью соответствуют общей точности, подтверждая согласованную работу модели для всех классов.
