лаasso-и-эластичная-сетка-регрессии-объяснение-визуальное-руководство-с-примерами-кода

Лассо и Эластичная Сеть: Объяснение с Визуальными Примерами и Кодом

Лассо и Эластичная Сетка: Разбор Полетов

Когда речь заходит о машинном обучении и статистическом моделировании, существуют техники регуляризации, которые важны не меньше, чем сам процесс моделирования. Они помогают избежать переобучения и обеспечивают обобщающую способность моделей. Среди таких мощных инструментов выделяются Лассо (наименьшая абсолютная величина сжатия и оператор выбора) и Эластичная Сетка. Давайте разберемся, что к чему и как это использовать, в том числе и с практическими примерами — для тех, кто не любит скучные тексты.

Лассо Регрессия: что это такое?

Определение и Принцип работы

Лассо — это тип линейной регрессии, который использует L1 регуляризацию для уменьшения переобучения. L1-пенальти, именуемая также «пенальти по абсолютной величине», сжимает (или лучше сказать — обрезает) коэффициенты незначительных факторов до нуля, что в свою очередь выполняет функцию выбора признаков. Если попросту, это такая способ отсева ненужного хлама.

Если вы хотите формулу, вот она:

<h2>Формула регрессии Лассо</h2>
<p>Лассо минимизирует следующую целевую функцию:</p>
<p>\[
\min_{\beta} \left( \frac{1}{2n} \sum_{i=1}^{n} (y_i - \beta_0 - \sum_{j=1}^{p} \beta_j x_{ij})^2 + \lambda \sum_{j=1}^{p} |\beta_j| \right)
\]</p>

Главное о Лассо

  • Выбор Функций: Лассо способен отрезать некоторые коэффициенты до нуля, таким образом выбирая самый релевантный набор признаков. Это, согласитесь, полезно!
  • Разреженность: Подход L1 вводит разреженность в модель, делая её более понятной. Меньше — лучше!
  • Настройка Гиперпараметров: Сила регуляризации контролируется гиперпараметром (\lambda). Чем больше (\lambda), тем больше коэффициентов окажется на обочине — в нуле.

Эластичная Сетка: А что это?

Определение и Принцип работы

Эластичная Сетка — это гибридный подход, который комбинирует достоинства Лассо и Риджа (L2 регуляризация). Она использует сочетание L1 и L2 пеналей для регуляризации коэффициентов. Это особенно полезно, если данные полны взаимосвязей. Эластичная Сетка подталкивает модель к выбору групп взаимосвязанных признаков, а не к отрезанию одного из них.

Вот их формула:

<h2>Формула Эластичной Сетки</h2>
<p>Эластичная Сетка минимизирует следующую целевую функцию:</p>
<p>\[
\min_{\beta} \left( \frac{1}{2n} \sum_{i=1}^{n} (y_i - \beta_0 - \sum_{j=1}^{p} \beta_j x_{ij})^2 + \lambda \left( \alpha \sum_{j=1}^{p} |\beta_j| + (1-\alpha) \sum_{j=1}^{p} \beta_j^2 \right) \right)
\]</p>

Главное о Эластичной Сетке

  • Комбинация Пеналей: Эластичная Сетка использует и L1, и L2, и их баланс регулируется гиперпараметрами (\lambda) и (\alpha). Скажем так, энергия настраивается!
  • Работа с Взаимосвязанными Признаками: В отличие от Лассо, Эластичная Сетка может назначать коэффициенты взаимосвязанным признакам, сжимая их вместе, а не выбирая одного из них и игнорируя остальные.
  • Настройка Гиперпараметров: Придется немного повозиться с настройкой и для (\lambda), и для (\alpha). Кросс-валидация будет вашим другом в этом деле.

Реализация

Итак, если вы уже горите желанием попробовать свои силы, давайте посмотрим, как это можно сделать с помощью Python и библиотеки scikit-learn.

Регрессия Лассо

from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

# Создаем набор данных для регрессии
X, y = make_regression(n_samples=100, n_features=10, noise=0.1)

# Делим данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Инициализируем и обучаем модель Лассо
lasso = Lasso(alpha=1)
lasso.fit(X_train, y_train)

# Выводим коэффициенты
print("Коэффициенты после регрессии Лассо:")
for feature, coef in zip(X_train.columns, lasso.coef_):
    print(f"{feature}: {coef:.2f}")

Регрессия Эластичной Сетки

from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

# Создаем набор данных для регрессии
X, y = make_regression(n_samples=100, n_features=10, noise=0.1)

# Делим данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Инициализируем и обучаем модель Эластичной Сетки
elastic_net = ElasticNet(alpha=1, l1_ratio=0.5)
elastic_net.fit(X_train, y_train)

# Выводим коэффициенты
print("Коэффициенты после регрессии Эластичной Сетки:")
for feature, coef in zip(X_train.columns, elastic_net.coef_):
    print(f"{feature}: {coef:.2f}")

Практический Пример

Чтобы продемонстрировать, на что способны Эластичная Сетка и Лассо, давайте применим их на наборе данных о качестве вина из репозитория UCI.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ElasticNetCV
from sklearn.preprocessing import StandardScaler

# Загружаем набор данных о качестве вина
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
df = pd.read_csv(url, sep=';')

# Отделяем признаки от целевой переменной
X = df.drop('quality', axis=1)
y = df['quality']

# Масштабируем данные
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)

# Используем Эластичную Сетку с кросс-валидацией для поиска оптимальных гиперпараметров
elastic_net_cv = ElasticNetCV(cv=5, random_state=1)
elastic_net_cv.fit(X_train, y_train)

print("Оптимальный alpha:", elastic_net_cv.alpha_)
print("Оптимальный l1-отношение:", elastic_net_cv.l1_ratio_)

Заключение

Так вот, Лассо и Эластичная Сетка — настоящие волшебники в мире статистики. Они помогут вам разбогатеть при работе с высокоразмерными данными и упростят выбор признаков и регуляризацию. Понимание этих моделей и их применение на практике значительно улучшит ваши регрессионные модели.

Остайтесь на Волне Изменений

Хотите быть в курсе последних новостей о нейросетях и автоматизации? Подпишитесь на наш Telegram-канал: @neuroko. Тут мы раскроем неприметные секреты и поделимся уникальным опытом.

лассо-эластичная-сетка-регрессии-визуальное-руководство-с-кодом Предыдущая запись Lasso и Elastic Net регрессии: объяснение с визуальным руководством и примерами кода
лассо-эластичная-сетка-регрессии-объяснение-визуальное-руководство-с-примерами-кода Следующая запись Регрессии Lasso и Elastic Net: объяснение с визуальным руководством и примерами кода