Стратегия, которая значительно снижает вероятность переобучения, называется регуляризацией. Методы регуляризации помогают предотвратить переоснащение, добавляя штрафной член к функции потерь модели, предотвращая чрезмерную сложность изученной модели.
Вот несколько популярных методов регуляризации и примеры кода:
-
Регуляризация L1 и L2 (также известная как лассо и регрессия гребня):
- Регуляризация L1 добавляет абсолютное значение коэффициентов в качестве штрафного члена.
- Регуляризация L2 добавляет квадраты значений коэффициентов в качестве штрафного члена.
from sklearn.linear_model import Lasso, Ridge # L1 regularization (Lasso) lasso_model = Lasso(alpha=0.01) lasso_model.fit(X_train, y_train) # L2 regularization (Ridge) ridge_model = Ridge(alpha=0.01) ridge_model.fit(X_train, y_train) -
Отсев:
- Dropout случайным образом деактивирует часть нейронов во время обучения, не позволяя модели слишком сильно полагаться на какой-либо отдельный нейрон.
from tensorflow.keras.layers import Dropout model = Sequential() model.add(Dense(64, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(64, activation='relu')) model.add(Dense(1, activation='sigmoid')) -
Ранняя остановка:
- Ранняя остановка останавливает процесс обучения, когда производительность проверочного набора начинает снижаться, предотвращая переподгонку модели к обучающим данным.
from tensorflow.keras.callbacks import EarlyStopping early_stopping = EarlyStopping(monitor='val_loss', patience=3) model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stopping]) -
Дополнение данных:
- При расширении данных искусственно увеличивается размер обучающего набора путем применения различных преобразований, таких как вращение, масштабирование или обрезка, к существующим обучающим данным.
from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator(rotation_range=10, width_shift_range=0.1, height_shift_range=0.1) datagen.fit(X_train) model.fit(datagen.flow(X_train, y_train), validation_data=(X_val, y_val))