Combatir el sobreajuste con dropout
Un problema común de las redes neuronales es que tienden a sobreajustarse a los datos de entrenamiento. Esto significa que la métrica de evaluación, como R\(^2\) o la accuracy, es alta para el conjunto de entrenamiento, pero baja para los conjuntos de prueba y validación, y el modelo está ajustando al ruido presente en los datos de entrenamiento.
Podemos intentar prevenir el sobreajuste usando dropout. Durante la fase de entrenamiento, esta técnica desactiva aleatoriamente algunas neuronas, lo que ayuda a evitar que la red se ajuste al ruido de los datos de entrenamiento. keras incluye una capa Dropout que podemos usar para esto. Debemos establecer la tasa de dropout, es decir, la fracción de conexiones que se desactivan durante el entrenamiento. Se indica como un decimal entre 0 y 1 en la capa Dropout().
Para este modelo, vamos a volver a la función de pérdida de error cuadrático medio.
Este ejercicio forma parte del curso
Machine Learning para finanzas con Python
Instrucciones del ejercicio
- Añade una capa de dropout (
Dropout()) después de la primera capa Dense del modelo y usa un 20% (0.2) como tasa de dropout. - Usa el optimizador
adamy la función de pérdidamseal compilar el modelo con.compile(). - Ajusta el modelo a
scaled_train_featuresytrain_targetsusando 25 épocas.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
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()