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

Член регуляризации L1 определяется как сумма абсолютных значений весов, умноженных на гиперпараметр, называемый лямбдой, который является положительной константой, определяющей силу регуляризации. Затем целевая функция с добавленным членом регуляризации L1 определяется как:

Целевая функция = функция потерь + (лямбда * сумма абсолютных весов)

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

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

Склеарн

Теперь давайте посмотрим на пример того, как реализовать регуляризацию L1 в Python с помощью библиотеки scikit-learn. Мы начнем с загрузки необходимых библиотек и создания некоторых синтетических данных для обучения модели линейной регрессии:

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

X, y = make_regression(n_samples=100, n_features=10, random_state=42)

Далее мы создадим экземпляр модели Lasso и установим для параметра lambda значение 0,1:

model = Lasso(alpha=0.1)

Параметр альфа в модели Лассо эквивалентен параметру лямбда в целевой функции. Теперь мы можем подогнать модель к данным, вызвав метод fit():

model.fit(X, y)

Как только модель подходит, мы можем проверить веса функций, обратившись к атрибуту coef_ модели:

print(model.coef_)

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

Мы также можем оценить производительность модели, вызвав метод score() и передав тестовые данные:

from sklearn.model_selection import train_test_split

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

print(model.score(X_test, y_test))

Метод score() возвращает коэффициент детерминации (R^2) прогноза. R^2 — это мера того, насколько хорошо модель соответствует данным, при этом значение 1 соответствует идеальному соответствию.

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