18+
реклама
18+
Бургер менюБургер меню

Холл Майкл Л. – Алгоритмы машинного обучения: базовый курс (страница 22)

18

log_model.fit(X_train, y_train)

# Предсказываем выживаемость пассажиров

y_pred = log_model.predict(X_test)

```

Шаг 3: Оценка качества модели

Выведем метрики точности и классификационный отчет.

```python

accuracy = accuracy_score(y_test, y_pred)

print(f"Точность модели: {accuracy:.2f}")

print(classification_report(y_test, y_pred))

```

Шаг 4: Интерпретация результатов

Посмотрим, какие факторы сильнее всего влияют на предсказания модели.

```python

feature_names = ['Pclass', 'Age', 'SibSp', 'Parch']

coefficients = log_model.coef_[0]

# Визуализируем влияние факторов

plt.figure(figsize=(8, 5))

sns.barplot(x=feature_names, y=coefficients)

plt.xlabel("Признаки")

plt.ylabel("Коэффициенты модели")

plt.title("Влияние факторов на вероятность выживания")

plt.show()

```

Вывод: если коэффициент у какого-то признака положительный, значит, этот фактор увеличивает вероятность выживания, а если отрицательный – снижает.

Сравнение и выводы

Линейная и логистическая регрессия применяются в разных задачах, но оба метода имеют схожий принцип работы.

– Линейная регрессия хорошо подходит для предсказания числовых значений, например, стоимости квартир. Ее коэффициенты позволяют понять, какие факторы оказывают наибольшее влияние на итоговое значение.

– Логистическая регрессия применяется в задачах классификации. Она предсказывает вероятность принадлежности к определенному классу, что полезно для медицинской диагностики, оценки риска отказа клиентов, предсказания выживаемости пассажиров и других задач.

Оба метода просты, эффективны и легко интерпретируются, что делает их отличным выбором для базовых задач машинного обучения.

В машинном обучении линейные модели часто сталкиваются с проблемой переобучения, особенно если количество признаков велико или среди них есть коррелированные. В таких случаях модель может подстраиваться под шум в данных, что приводит к плохим результатам на новых примерах.

Чтобы решить эту проблему, применяют регуляризацию – метод, который добавляет штраф за сложность модели и тем самым ограничивает величину коэффициентов. Основные виды регуляризации для линейных моделей – Ridge (L2-регуляризация) и Lasso (L1-регуляризация).

Почему нужна регуляризация?

Рассмотрим пример: у нас есть модель линейной регрессии, которая предсказывает стоимость квартиры на основе площади, количества комнат и удаленности от центра. Если данные содержат шум или признаки сильно скоррелированы, модель может присвоить слишком большие веса несущественным параметрам, что приведет к переобучению.

Регуляризация помогает сгладить влияние отдельных признаков, контролируя их коэффициенты, и делает модель более устойчивой.

Ridge-регуляризация, также называемая L2-регуляризацией, накладывает штраф на сумму квадратов коэффициентов модели. Это не дает им становиться слишком большими и помогает справиться с многоколоинейностью (сильной зависимостью между признаками).

L2-регуляризация полезна, если у вас есть много признаков и вы не хотите отбрасывать ни один из них, но хотите уменьшить их влияние.

Пример: Ridge-регрессия на данных о квартирах

```python

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.linear_model import Ridge

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

from sklearn.metrics import mean_absolute_error

# Создаем искусственные данные

data = {

'Площадь': [30, 45, 50, 60, 75, 90, 110, 150, 200, 250],

'Комнат': [1, 1, 2, 2, 3, 3, 4, 5, 6, 7],

'Удаленность_от_центра': [10, 8, 7, 5, 4, 3, 2, 1, 1, 1],

'Цена': [3.5, 5.0, 6.0, 7.5, 9.0, 11.0, 13.5, 18.0, 24.0, 30.0]

}

df = pd.DataFrame(data)

# Разделяем на признаки (X) и целевую переменную (y)

X = df[['Площадь', 'Комнат', 'Удаленность_от_центра']]

y = df['Цена']

# Нормализация признаков

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

# Разделение на обучающую и тестовую выборки

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# Обучение модели Ridge-регрессии с коэффициентом регуляризации alpha=1.0

ridge_model = Ridge(alpha=1.0)

ridge_model.fit(X_train, y_train)