Алгоритмы машинного обучения: базовый курс. Тайлер Венс

Алгоритмы машинного обучения: базовый курс - Тайлер Венс


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

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

Ridge-регуляризация (L2)

      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)

      # Предсказание

      y_pred = ridge_model.predict(X_test)

      # Оценка качества модели

      mae = mean_absolute_error(y_test, y_pred)

      print(f"Средняя абсолютная ошибка (MAE): {mae:.2f}")

      # Визуализация коэффициентов

      ridge_coefs = ridge_model.coef_

      plt.bar(['Площадь', 'Комнат', 'Удаленность_от_центра'], ridge_coefs)

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

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

      plt.title("Влияние факторов в Ridge-регрессии")

      plt.show()

      ```

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

Lasso-регуляризация (L1)

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

      L1-регуляризация полезна, если среди признаков много незначимых, и модель должна автоматически их исключить.

      Пример: Lasso-регрессия на тех же данных

      ```python

      from sklearn.linear_model import Lasso

      # Обучение модели Lasso-регрессии

      lasso_model = Lasso(alpha=0.1)

      lasso_model.fit(X_train, y_train)

      # Предсказание

      y_pred = lasso_model.predict(X_test)

      # Оценка модели

      mae = mean_absolute_error(y_test, y_pred)

      print(f"Средняя абсолютная ошибка (MAE): {mae:.2f}")

      #


Скачать книгу