Регуляризация – это техника, используемая для предотвращения переобучения модели путем добавления штрафа за сложность модели в ее функцию потерь. Существуют несколько методов регуляризации, каждый из которых имеет свои особенности и области применения.
Добавляет сумму абсолютных значений коэффициентов (весов) модели в функцию потерь. Это приводит к тому, что некоторые коэффициенты становятся равными нулю, что может быть полезно для отбора признаков.
Функция потерь: \( J(\theta) = \text{MSE} + \lambda \sum_{i=1}^{n} |\theta_i| \)
from sklearn.linear_model import Lasso
# Создание и обучение модели
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
# Предсказание
predictions = lasso.predict(X_test)
Добавляет сумму квадратов коэффициентов (весов) модели в функцию потерь. Это помогает уменьшить значения всех коэффициентов, но не приводит их к нулю.
Функция потерь: \( J(\theta) = \text{MSE} + \lambda \sum_{i=1}^{n} \theta_i^2 \)
from sklearn.linear_model import Ridge
# Создание и обучение модели
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
# Предсказание
predictions = ridge.predict(X_test)
Объединяет оба метода L1 и L2 регуляризации, что позволяет использовать преимущества обоих подходов. Оно добавляет комбинацию L1 и L2 штрафов в функцию потерь.
Функция потерь: \( J(\theta) = \text{MSE} + \lambda_1 \sum_{i=1}^{n} |\theta_i| + \lambda_2 \sum_{i=1}^{n} \theta_i^2 \)
from sklearn.linear_model import ElasticNet
# Создание и обучение модели
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic_net.fit(X_train, y_train)
# Предсказание
predictions = elastic_net.predict(X_test)
Используется в нейронных сетях и заключается в случайном отключении (обнулении) определенного процента нейронов на каждом этапе обучения. Это предотвращает переобучение, так как модель не может полагаться на конкретные нейроны.
from keras.models import Sequential
from keras.layers import Dense, Dropout
# Создание модели
model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
# Компиляция и обучение модели
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=50, batch_size=32)
Мониторит качество модели на валидационном наборе данных и останавливает обучение, если качество перестает улучшаться. Это помогает избежать переобучения.
from keras.callbacks import EarlyStopping
# Создание модели
model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Компиляция модели
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Использование ранней остановки
early_stopping = EarlyStopping(monitor='val_loss', patience=10)
# Обучение модели
model.fit(X_train, y_train, validation_split=0.2, epochs=100, batch_size=32, callbacks=[early_stopping])
Основные методы регуляризации включают L1-регуляризацию (Lasso), L2-регуляризацию (Ridge), Elastic Net, Dropout и раннюю остановку. Эти методы помогают предотвратить переобучение моделей, улучшая их обобщающую способность.