Combatendo overfitting com dropout
Um problema comum em redes neurais é que elas tendem a fazer overfitting nos dados de treino. Isso significa que a métrica de avaliação, como R\(^2\) ou acurácia, é alta no conjunto de treino, mas baixa nos conjuntos de teste e validação, e o modelo acaba ajustando o ruído presente nos dados de treino.
Podemos trabalhar para evitar overfitting usando dropout. Essa técnica desativa aleatoriamente alguns neurônios durante o treinamento, o que ajuda a impedir que a rede se ajuste ao ruído nos dados de treino. O keras tem uma camada Dropout que podemos usar para isso. Precisamos definir a taxa de dropout, ou seja, a fração de conexões desativadas durante o treinamento. Ela é definida como um decimal entre 0 e 1 na camada Dropout().
Vamos voltar a usar a função de perda mean squared error para este modelo.
Este exercicio faz parte do curso
Machine Learning para Finanças em Python
Instruções do exercicio
- Adicione uma camada de dropout (
Dropout()) após a primeira camada Dense no modelo e use 20% (0.2) como taxa de dropout. - Use o otimizador
adame a função de perdamseao compilar o modelo com.compile(). - Treine o modelo com
scaled_train_featuresetrain_targetsusando 25 épocas.
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
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()