- •Загрузка данных:
- •Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
- •Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
- •Оцените сбалансированность классов.
- •Проведите предобработку данных при необходимости.
- •Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Логистическая регрессия:
- •Метод опорных векторов:
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Решающие деревья:
- •Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
- •Выбор классификатора:
- •Постройте таблицу с метриками Precision, Recall, для полученных результатов каждым классификатором.
- •Сделайте выводы о том, какие классификаторы лучше всего подходят для вашего набора данных и почему.
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В. И. Ульянова (Ленина)
Кафедра МО ЭВМ
отчет
по лабораторной работе №4
по дисциплине «Основы машинного обучения»
Тема: Классификация
Студентка гр. 2383 |
|
Бараева Е. Н. |
Преподаватель |
|
Жангиров Т. Р. |
Санкт-Петербург
2025
Цель работы.
Исследовать и сравнить методы классификации: kNN, логистическая регрессия, метод опорных векторов, решающие деревья. Определить оптимальные параметры для каждого алгоритма, обеспечивающие максимальную точность и обобщающую способность. Оценить качество моделей с помощью различных метрик и визуализации границ принятия решений. Выявить наилучший алгоритм для конкретного набора данных.
Задание.
Вариант 3
Загрузка данных
Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
Оцените сбалансированность классов.
Проведите предобработку данных при необходимости.
Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
KNN
Проведите классификацию методом k ближайших соседей, подобрав параметры: количество соседей, необходимость взвешивания. Постройте графики зависимости точности (Accuracy) в зависимости от количества соседей (по 1-й линии для взвешенного и не взвешенного метода).
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Рассчитайте значения Precision, Recall, F1 для полученных результатов.
Логистическая регрессия
Проведите классификацию методом логистической регрессии при различных параметрах: без регуляризации, с l1 регуляризацией, c l2 регуляризацией. Постройте столбчатую диаграмму зависимости точности (Accuracy) от наличия регуляризации. Дальнейшие пункты 3.* выполняйте для лучшего параметра.
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Рассчитайте значения Precision, Recall, F1 для полученных результатов.
Метод опорных векторов
Проведите классификацию методом опорных векторах при различных параметрах ядра: “linear”, “poly” (нужно выбрать степень), “rbf”. Постройте столбчатую диаграмму зависимости точности (Accuracy) от вида ядра. Дальнейшие пункты 4.* выполняйте для лучшего параметра.
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Рассчитайте значения Precision, Recall, F1 для полученных результатов.
Решающие деревья
Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.д.).
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Рассчитайте значения Precision, Recall, F1 для полученных результатов.
Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
Выбор классификатора
Постройте таблицу с метриками Precision, Recall, для полученных результатов каждым классификатором.
Сделайте выводы о том, какие классификаторы лучше всего подходят для вашего набора данных и почему.
Выполнение работы.
Загрузка данных:
Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
Для загрузки наборов необходимо использовать метод read_csv из библиотеки Pandas. Вызвав метод head, можно проверить корректность загруженных данных (по умолчанию он возвращает 5 первых строк). Реализация приведена в Листинге 1.1.1. Результат представлен в Таблице 1.1.2.
Листинг 1.1.1 – Загрузка данных из файла и вызов метода head
import pandas as pd df = pd.read_csv("lab4_5.csv") print(df.head()) |
Таблица 1.1.2 – Результат вывода первых пяти записей датафрейма
|
X1 |
X2 |
Class |
0 |
-0.442073 |
1.491221 |
ON |
1 |
0.655868 |
0.623038 |
MO |
2 |
0.374073 |
-0.822161 |
MO |
3 |
0.793154 |
0.808877 |
MO |
4 |
0.885889 |
0.683403 |
MO |
Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
Для начала подключим библиотеки Seaborn и Matplotlib. Создадим объект plt.figure. Затем с помощью sns.scatterplot построим диаграммы рассеяния. После зададим название осям, легенде и отобразим диаграмму. Реализация представлена в Листинге 1.2.1. Диаграмма изображена на Рисунке 1.2.2.
Листинг 1.2.1 – Реализация построения диаграммы рассеяния
import matplotlib.pyplot as plt import seaborn as sns
plt.figure() sns.scatterplot(data=df, x="X1", y="X2", hue="Class") plt.xlabel("X1") plt.ylabel("X2") plt.legend(title="Класс") plt.show() |
Рисунок 1.2.2 – Диаграмма рассеяния датафрейма
Оцените сбалансированность классов.
Для оценки сбалансированности классов выведем количество объектов каждого класса. Реализация представлена в Листинге 1.3.1. Результат представлен в Листинге 1.3.2.
Листинг 1.3.1 – Оценка сбалансированности классов
print(df['Class'].value_counts()) |
Листинг 1.3.2 – Количество объектов каждого класса
Class ON 201 MO 200 |
Классы сбалансированы отлично: 201 объект класса ON и 200 объектов класса MO. Это означает, что дополнительная балансировка не требуется.
Проведите предобработку данных при необходимости.
Стандартизируем числовые признаки, чтобы ускорить обучение и улучшить сходимость модели. Также закодируем категориальные метки классов, так как алгоритмы требуют числовой формат. Реализация представлена в Листинге 1.4.1.
Листинг 1.4.1 – Стандартизация данных
from sklearn.preprocessing import LabelEncoder, StandardScaler
label_encoder = LabelEncoder() df['Class'] = label_encoder.fit_transform(df['Class'])
X = df[['X1', 'X2']] y = df['Class']
scaler = StandardScaler() X_scaled = scaler.fit_transform(X) |
Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
Сначала импортируем train_test_split из sklearn.model_selection для разделения данных на обучающую и тестовую выборки. Далее с помощью этой функции осуществляется разделение данных на тестовую и обучающую выборки. Реализация приведена в Листинге 1.5.1.
Листинг 1.5.1 – Разделение выборки на обучающую и тестовую
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42, stratify=y) |
KNN:
Проведите классификацию методом k ближайших соседей, подобрав параметры: количество соседей, необходимость взвешивания. Постройте графики зависимости точности (Accuracy) в зависимости от количества соседей (по 1-й линии для взвешенного и не взвешенного метода).
Сначала для каждого значения k создаются и обучаются две модели KNN (uniform и distance), вычисляется точность предсказаний на тестовых данных, результаты сохраняются в списки. Затем строится график зависимости точности от количества соседей для обоих моделей с легендой, добавляются подписи осей, сетка и отображается график. Реализация приведена в Листинге 2.1.1. График изображен на Рисунке 2.1.2.
Листинг 2.1.1 – Проведение классификации с подбором параметров
from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score
neighbors = np.arange(1, 11) uniform, distance = [], []
for k in neighbors: knn_uniform = KNeighborsClassifier(n_neighbors=k, weights='uniform') knn_uniform.fit(X_train, y_train) pred_uniform = knn_uniform.predict(X_test) uniform.append(accuracy_score(y_test, pred_uniform))
knn_distance = KNeighborsClassifier(n_neighbors=k, weights='distance') knn_distance.fit(X_train, y_train) pred_distance = knn_distance.predict(X_test) distance.append(accuracy_score(y_test, pred_distance))
plt.figure() plt.plot(neighbors, uniform, marker='o', label='Без взвешивания') plt.plot(neighbors, distance, marker='s', label='С взвешиванием') plt.xlabel('Neighbours Count') plt.ylabel('Accuracy') plt.legend() plt.grid() plt.show() |
Рисунок 2.1.2 – График точности в зависимости от числа соседей
Наибольшая точность достигается при взвешенном с количеством соседей равным 7, 8, 9, 10 и при без взвешивания с количеством соседей равным 5, 6, 7, 9.
После анализа всех вариантов оптимальным выбором можно считать модель с 5 соседями и выключенным взвешиванием. Этот вариант сохраняет высокую точность, упрощают модель (без взвешивания), уменьшают влияние шумов и выбросов.
