Ejercicio 4

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.

  • a) Determine una estrategia para dividir los datos en dos conjuntos: {ptrain,ttrain} y {ptest,ttest}
  • 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


FeedForwardNetwork-34
   Modules:
    []
   Connections:
    []


In [85]:
n.sortModules()

In [86]:
trainer = BackpropTrainer(n, ds)


---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-86-0459581be1c6> in <module>()
----> 1 trainer = BackpropTrainer(n, ds)

/usr/local/lib/python2.7/dist-packages/pybrain/supervised/trainers/backprop.pyc in __init__(self, module, dataset, learningrate, lrdecay, momentum, verbose, batchlearning, weightdecay)
     33         """
     34         Trainer.__init__(self, module)
---> 35         self.setData(dataset)
     36         self.verbose = verbose
     37         self.batchlearning = batchlearning

/usr/local/lib/python2.7/dist-packages/pybrain/supervised/trainers/trainer.pyc in setData(self, dataset)
     20         self.ds = dataset
     21         if dataset:
---> 22             assert dataset.indim == self.module.indim
     23             assert dataset.outdim == self.module.outdim
     24 

AssertionError: 

In [ ]:
trainer.train()

In [ ]: