УМК СПО

Учебно-методические комплексы

для преподавателей СПО








Эксперимент с параметром C в логистической регрессии

ОП.10 Машинное обучение
Лабораторная работа №1
Тема: Эксперимент с параметром C в логистической регрессии

Цель работы: Экспериментально исследовать влияние параметра регуляризации C на качество модели логистической регрессии. Подобрать оптимальное значение C для заданного датасета.
Время выполнения: 2 академических часа
Тип работы: Лабораторная (экспериментальное исследование)

ЗАДАНИЕ ДЛЯ СТУДЕНТА

Этап 1. Подготовка данных (10 минут)

Загрузите датасет и разделите его на обучающую и тестовую выборки:



import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# Загрузка данных
data = load_breast_cancer()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target)

print(f"Размер выборки: {X.shape}")
print(f"Классы: {np.unique(y)}")
print(f"Распределение классов:\n{y.value_counts()}")

# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y
)
print(f"Обучающая выборка: {X_train.shape}")
print(f"Тестовая выборка: {X_test.shape}")



Этап 2. Эксперимент: изменение параметра C (25 минут)

Проведите эксперимент с разными значениями C:



# Значения C для эксперимента (разные порядки)
C_values = [0.001, 0.01, 0.1, 1, 10, 100, 1000]
results = []

for C in C_values:
# Создаём и обучаем модель
model = LogisticRegression(C=C, max_iter=1000, random_state=42)
model.fit(X_train, y_train)

# Предсказания
y_pred = model.predict(X_test)

# Метрики качества
acc = accuracy_score(y_test, y_pred)
prec = precision_score(y_test, y_pred)
rec = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

results.append({
'C': C,
'accuracy': acc,
'precision': prec,
'recall': rec,
'f1_score': f1
})

# Результаты эксперимента
results_df = pd.DataFrame(results)
print("Результаты эксперимента:")
print(results_df)



Задание для анализа:
• При каком значении C accuracy максимальна?
• Как меняется precision при увеличении C?
• Какое значение C даёт лучший баланс метрик?

Этап 3. Визуализация зависимости качества от C (20 минут)

Постройте графики зависимости метрик от параметра C:



# Построение графиков
plt.figure(figsize=(12, 5))

plt.subplot(1, 2, 1)
plt.semilogx(results_df['C'], results_df['accuracy'], 'o-', label='Accuracy')
plt.semilogx(results_df['C'], results_df['precision'], 's-', label='Precision')
plt.semilogx(results_df['C'], results_df['recall'], '^-', label='Recall')
plt.semilogx(results_df['C'], results_df['f1_score'], 'd-', label='F1-score')
plt.xlabel('Параметр C (логарифмическая шкала)')
plt.ylabel('Значение метрики')
plt.title('Зависимость качества модели от параметра C')
plt.legend()
plt.grid(True, alpha=0.3)

plt.subplot(1, 2, 2)
plt.semilogx(results_df['C'], results_df['accuracy'], 'o-', linewidth=2, markersize=8)
plt.xlabel('Параметр C (логарифмическая шкала)')
plt.ylabel('Accuracy')
plt.title('Оптимизация параметра C')
plt.axhline(y=results_df['accuracy'].max(), color='r', linestyle='--', label=f"Максимум: {results_df['accuracy'].max():.3f}")
plt.legend()
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()



Вопросы для анализа:
• При каких значениях C качество модели низкое? Почему?
• На каком интервале значений C качество стабилизируется?

Этап 4. Анализ коэффициентов модели (15 минут)

Исследуйте, как меняются веса признаков при изменении C:



# Обучим модели с разными C
models = {}
for C in [0.001, 0.01, 0.1, 1, 10, 100]:
models[C] = LogisticRegression(C=C, max_iter=1000, random_state=42)
models[C].fit(X_train, y_train)

# Сравним коэффициенты для нескольких признаков
feature_names = X.columns[:5] # первые 5 признаков
coef_data = {'C': []}
for f in feature_names:
coef_data[f] = []

for C, model in models.items():
coef_data['C'].append(C)
for i, f in enumerate(feature_names):
coef_data[f].append(model.coef_[0][i])

coef_df = pd.DataFrame(coef_data)
print("Коэффициенты модели для разных C (первые 5 признаков):")
print(coef_df)

# Визуализация изменения коэффициентов
plt.figure(figsize=(10, 6))
for f in feature_names:
plt.semilogx(coef_df['C'], coef_df[f], 'o-', label=f)
plt.xlabel('Параметр C')
plt.ylabel('Значение коэффициента')
plt.title('Зависимость весов признаков от параметра C')
plt.legend(bbox_to_anchor=(1.05, 1))
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()



Вопросы для анализа:
• Что происходит с коэффициентами при маленьких значениях C?
• Что происходит с коэффициентами при больших значениях C?

Этап 5. Выводы по лабораторной работе (10 минут)

Оформите отчёт, включив в него:

1. Таблицу с метриками качества для всех значений C
2. Графики зависимости метрик от C
3. Ответы на вопросы:
- Какое значение C оптимально для данного датасета?
- Как параметр C влияет на переобучение/недообучение?
- Почему при очень маленьких и очень больших C качество падает?
4. Вывод о выборе параметра регуляризации C

КРИТЕРИИ ОЦЕНКИ

КритерийМакс. балл
Эксперимент проведён для всех значений C3
Графики построены и проанализированы3
Анализ коэффициентов выполнен2
Выводы обоснованы и полные2
Итого10


ОТВЕТ ДЛЯ ПРЕПОДАВАТЕЛЯ (эталонный результат)


Нажмите, чтобы увидеть ответы
Этап 2. Оптимальное значение C:
• Accuracy максимальна при C=1 или C=10 (≈0.98)
• При C=0.001 качество низкое (недообучение)
• При C=1000 качество может немного снижаться

Этап 3. Анализ графиков:
• При C < 0.01: модель недообучена (коэффициенты слишком маленькие)
• При C от 0.1 до 100: модель работает стабильно
• При C > 1000: возможно небольшое переобучение

Этап 4. Анализ коэффициентов:
• При маленьких C: коэффициенты близки к нулю (сильная регуляризация)
• При больших C: коэффициенты растут (слабая регуляризация)

Этап 5. Вывод:
Оптимальное значение C для данного датасета находится в диапазоне [0.1, 10]. Рекомендуемое значение C=1 даёт лучший баланс между качеством и обобщающей способностью.


Автор: УМК СПО
Лицензия: Бесплатное использование с указанием источника





Логин: Пароль: Забыли пароль?Регистрация

Самозанятый: Стешенко Светлана Николаевна ИНН: 231408226339

Актуальная версия — 2026
Сайт сделан на SiNG cms © 2010-2020