📌 Какие методы регуляризации есть ?



💬 Спрашивают в 14% собеседований



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



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



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



Функция потерь: \( 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)




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



Добавляет сумму квадратов коэффициентов (весов) модели в функцию потерь. Это помогает уменьшить значения всех коэффициентов, но не приводит их к нулю.



Функция потерь: \( 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)




3️⃣ Elastic Net



Объединяет оба метода 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)




4️⃣ Dropout



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

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)




5️⃣ Ранняя остановка (Early Stopping)



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

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 и раннюю остановку. Эти методы помогают предотвратить переобучение моделей, улучшая их обобщающую способность.



🔥 ТОП ВОПРОСОВ С СОБЕСОВ



🔒 База собесов | 🔒 База тестовых