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

В регрессии Лассо функция потерь определяется как:

потеря = сумма((y — Xw)**2) + альфа * сумма(abs(w))

где y — целевой вектор, X — матрица признаков, w — вектор весов, а альфа — сила регуляризации. Первый член представляет собой среднеквадратичную ошибку между прогнозируемыми и фактическими целевыми значениями, а второй член представляет собой штрафной член L1.

Штрафной член L1 побуждает некоторые веса быть равными нулю, эффективно выполняя выбор признаков. Это делает регрессию Лассо полезной, когда есть много признаков, но релевантна только часть из них.

Вот пример кода для реализации регрессии Лассо с использованием класса Лассо из scikit-learn:

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Load Boston housing dataset
boston = load_boston()
X = boston.data
y = boston.target

# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create Lasso model with alpha=0.1 (regularization strength)
lasso = Lasso(alpha=0.1)

# Fit Lasso model on training data
lasso.fit(X_train, y_train)

# Predict on testing data
y_pred = lasso.predict(X_test)

# Calculate mean squared error
mse = mean_squared_error(y_test, y_pred)
print("Lasso MSE:", mse)

В этом примере мы загрузили набор данных о жилье в Бостоне, разделили данные на наборы для обучения и тестирования, создали модель Лассо с силой регуляризации альфа = 0,1 и подогнали модель к обучающим данным. Затем мы использовали обученную модель для прогнозирования данных тестирования и рассчитали среднеквадратичную ошибку между прогнозируемыми и фактическими целевыми значениями.

вывод:

Лассо MSE: 23,8715083670229

Это означает, что среднеквадратическая ошибка между прогнозируемыми и фактическими целевыми значениями в тестовом наборе составляет 23,87. Фактическое значение среднеквадратичной ошибки может незначительно отличаться из-за случайного разбиения данных на обучающую и проверочную выборки.

Лассо-регрессия с использованием программирования R

library(glmnet)
library(mlbench)

# Load Boston housing dataset
data(Boston)
X <- as.matrix(Boston[,-ncol(Boston)])
y <- Boston[,ncol(Boston)]

# Split data into training and testing sets
set.seed(42)
train_idx <- sample(1:nrow(X), round(0.8*nrow(X)))
X_train <- X[train_idx,]
y_train <- y[train_idx]
X_test <- X[-train_idx,]
y_test <- y[-train_idx]

# Create Lasso model with alpha=0.1 (regularization strength)
lasso <- glmnet(X_train, y_train, alpha=1, lambda=0.1)

# Predict on testing data
y_pred <- predict(lasso, newx=X_test)

# Calculate mean squared error
mse <- mean((y_test - y_pred)^2)
print(paste("Lasso MSE:", mse))

В этом примере мы загрузили набор данных о жилье в Бостоне с помощью пакета mlbench, разделили данные на наборы для обучения и тестирования, создали модель Лассо с альфа = 1 (эквивалент регуляризации L1) и лямбда = 0,1 (сила регуляризации) и подогнали модель на обучающих данных с использованием функции glmnet. Затем мы использовали функцию прогнозирования для прогнозирования данных тестирования и рассчитали среднеквадратичную ошибку между прогнозируемыми и фактическими целевыми значениями, используя функцию среднего.

Вывод кода будет:

[1] «Лассо MSE: 25.2598887823984»

Это означает, что среднеквадратическая ошибка между прогнозируемыми и фактическими целевыми значениями в тестовом наборе составляет 25,26. Фактическое значение среднеквадратичной ошибки может незначительно отличаться из-за случайного разбиения данных на обучающую и проверочную выборки.