La idea de este ejercicio es estudiar el fenómeno de overfitting. Supongamos que tenemos una serie de datos que vamos ajustar con una red (una capa hidden). Los datos se encuentran en el archivo datos_guia4_ej4.mat. Nuestro objetivo es determinar el número optimo de neuronas en la capa hidden.
b) Ajuste Nest redes neuronales con Nneuro neuronas en la capa hidden
c) Grafique el error absoluto promedio para los ajustes de entrenamiento {ptrain,ttrain} y para los ajustes con los datos de testeo {ptest,ttest}.
d) Explique el comportamiento de ambos errores.
In [73]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
%matplotlib inline
plt.rcParams['figure.figsize'] = 8,6 #parámetros de tamaño
In [74]:
from pybrain.structure import FeedForwardNetwork, LinearLayer, SigmoidLayer
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.datasets import SupervisedDataSet
In [75]:
n = FeedForwardNetwork()
In [76]:
N_neurons = 3
inLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(N_neurons)
outLayer = LinearLayer(1)
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
In [77]:
from pybrain.structure import FullConnection
In [78]:
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
In [79]:
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
In [80]:
datos = sio.loadmat('datos_guia4_ej4.mat')
t = datos['t']
p = datos['p']
In [81]:
target_size = t.shape
In [82]:
input_size = p.shape
In [83]:
ds = SupervisedDataSet(input_size[1], target_size[1])
ds.setField('input', p)
ds.setField('target', t)
In [84]:
print n
In [85]:
n.sortModules()
In [86]:
trainer = BackpropTrainer(n, ds)
In [ ]:
trainer.train()
In [ ]: