Lutter contre le surapprentissage avec le dropout
Un problème fréquent avec les réseaux de neurones est leur tendance au surapprentissage. Cela signifie que la métrique de score, comme R\(^2\) ou l'accuracy, est élevée sur l'ensemble d'entraînement, mais faible sur les ensembles de test et de validation ; le modèle s'ajuste alors au bruit présent dans les données d'entraînement.
Pour prévenir le surapprentissage, on peut utiliser le dropout. Cette technique désactive aléatoirement certains neurones pendant l'entraînement, ce qui aide à éviter que le réseau ne s'adapte au bruit. keras propose une couche Dropout pour cela. Il faut définir le taux de dropout, c'est-à-dire la fraction de connexions désactivées pendant l'entraînement. Ce taux se règle avec une valeur décimale entre 0 et 1 dans la couche Dropout().
Pour ce modèle, nous allons revenir à la fonction de perte « mean squared error ».
Cet exercice fait partie du cours
<cours>Machine Learning pour la finance en Python</cours>Instructions de l’exercice
- Ajoutez une couche de dropout (
Dropout()) après la première couche Dense du modèle, avec un taux de 20 % (0,2). - Utilisez l'optimiseur
adamet la fonction de pertemselors de la compilation du modèle avec.compile(). - Entraînez le modèle sur
scaled_train_featuresettrain_targetspendant 25 époques.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
from keras.layers import Dropout
# Create model with dropout
model_3 = Sequential()
model_3.add(Dense(100, input_dim=scaled_train_features.shape[1], activation='relu'))
model_3.add(____)
model_3.add(Dense(20, activation='relu'))
model_3.add(Dense(1, activation='linear'))
# Fit model with mean squared error loss function
model_3.compile(optimizer=____, loss=____)
history = model_3.fit(____, ____, epochs=____)
plt.plot(history.history['loss'])
plt.title('loss:' + str(round(history.history['loss'][-1], 6)))
plt.show()