Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по ОМО 2025 / Baraeva_Elizaveta_lb4.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
814 Кб
Скачать
☆
  1. Логистическая регрессия:

  1. Проведите классификацию методом логистической регрессии при различных параметрах: без регуляризации, с 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 – Диаграмма точности в зависимости от вида регуляризации

Все три модели показали одинаковую точность, значит будем использовать без регуляризации для упрощения.

  1. Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.

Построение аналогично п.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, но большинство точек остаются в своей области.

  1. Рассчитайте значения 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%, подтверждая стабильность модели для обоих классов.

Соседние файлы в папке Лабы по ОМО 2025