- •Загрузка данных:
- •Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
- •Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
- •Оцените сбалансированность классов.
- •Проведите предобработку данных при необходимости.
- •Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Логистическая регрессия:
- •Метод опорных векторов:
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Решающие деревья:
- •Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
- •Выбор классификатора:
- •Постройте таблицу с метриками Precision, Recall, для полученных результатов каждым классификатором.
- •Сделайте выводы о том, какие классификаторы лучше всего подходят для вашего набора данных и почему.
Логистическая регрессия:
Проведите классификацию методом логистической регрессии при различных параметрах: без регуляризации, с l1 регуляризацией, c l2 регуляризацией. Постройте столбчатую диаграмму зависимости точности (Accuracy) от наличия регуляризации. Дальнейшие пункты 3.* выполняйте для лучшего параметра.
Сначала создаются 3 модели. Каждая модель обучается на тренировочных данных, после чего вычисляется точность (accuracy) на тестовом наборе. Далее результаты отображаются в виде столбчатой диаграммы. Реализация приведена в Листинге 3.1.1. Диаграмма изображена на Рисунке 3.1.2.
Листинг 3.1.1 – Реализация построения столбчатой диаграммы точности в зависимости от вида регуляризации
from sklearn.linear_model import LogisticRegression
models = { 'Без регуляризации': LogisticRegression(penalty=None, max_iter=1000), 'L1 регуляризация': LogisticRegression(penalty='l1', solver='saga', max_iter=1000), 'L2 регуляризация': LogisticRegression(penalty='l2', max_iter=1000) }
accuracies = {} for name, model in models.items(): model.fit(X_train, y_train) y_pred = model.predict(X_test) accuracies[name] = accuracy_score(y_test, y_pred)
plt.figure(figsize=(10, 6)) plt.bar(accuracies.keys(), accuracies.values()) plt.ylabel('Accuracy') |
Рисунок 3.1.2 – Диаграмма точности в зависимости от вида регуляризации
Все три модели показали одинаковую точность, значит будем использовать без регуляризации для упрощения.
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Построение аналогично п.2.2. Реализация приведена в Листинге 3.2.1. Диаграмма изображена на Рисунке 3.2.2.
Листинг 3.2.1 – Реализация построения диаграммы рассеяния с границами принятия решений
log_reg = LogisticRegression(penalty=None, max_iter=1000).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 = log_reg.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() |
Рисунок 3.2.2 – Диаграмма рассеяния с границами принятия решений
Граница принятия решений представлена прямой линией, что характерно для логистической регрессии. Данные демонстрируют не очень хорошую разделимость по сравнению с KNN, но большинство точек остаются в своей области.
Рассчитайте значения Precision, Recall, f1 для полученных результатов.
Расчет значений аналогичен п.2.4. Реализация представлена в Листинге 3.4.1. Результат представлен в Листинге 3.4.2.
Листинг 3.4.1 – Расчет значений Precision, Recall, F1
y_pred = log_reg.predict(X_test) print(classification_report(y_test, y_pred, digits=4)) |
Листинг 3.4.2 – Результаты расчета
precision recall f1-score support
0 0.9016 0.9167 0.9091 60 1 0.9167 0.9016 0.9091 61
accuracy 0.9091 121 macro avg 0.9092 0.9092 0.9091 121 weighted avg 0.9092 0.9091 0.9091 121 |
Из результатов можно увидеть, что модель логистической регрессии показывает сбалансированные и хорошие результаты классификации с общей точностью 90.91%. Для класса 0 Precision составляет 90.16% (9.84% неверно предсказаны), Recall равен 91.67% (модель находит 91.67% истинных классов 0). Для класса 1 Precision немного выше – 91.67%, а вот Recall немного ниже 90.16%. Значения F1-score для обоих классов идентичны (90.91%), что свидетельствует о хорошем балансе между точностью и полнотой предсказаний. Средние значения (macro avg и weighted avg) находятся на уровне 90.9%, подтверждая стабильность модели для обоих классов.
