# Matlab para preprocesamiento de datos en una red neuronal



## juanka1592 (Dic 5, 2011)

Hola a todos y a todas!

Esta vez os quiero hacer una pequeña consulta sobre algunas funciones de matlab para el preprocesamiento de datos en una red neuronal.

La situación es la siguiente: 

Tenemos una matriz de datos con m medidas de n sensores. Quiero minimizar la varianza dentro de una clase, así la respuesta de un sensor X a un compuesto Y está siempre cercana a la de todas las medidas (eso significa varianza en una clase, no?). 
Luego quiero que las clases se alejen entre sí, es decir aumentar la varianza entre clases.  Así podré tener un subgrupo de sensores para discriminar mejor los compuestos.

Qué funciones de matlab me podrían ayudar a hacer este preprocesamiento?

Muchas gracias por vuestra ayuda!!


----------



## ingecar (Dic 27, 2011)

pero al fin de cuentas que quieres hacer con la red neuronal?...
la varianza quiere decir que tanto varia una señal con respecto a otra, lo que hace la red es tomar un grupo de ejemplos y de estos aprender a identificarlo para luego clasificar....

necesitas definir una matriz que seran tus patrones la cual debes dividir en un porcentaje de entrenamiento otro para test y otro para validacion, y otra matriz para tus target que deben ser correspondientes a tus patrones...

bueno te lo voy a explicar como yo lo he hecho.


red=newff(Pe,Te,[100 50],{'tansig','tansig','tansig'},'trainscg'); %Instruncción para crear una red feedforward

%Los parámetros ingresados a la red creada son:

%El primer parámetro son los patrones o ejemplos para le proceso de
%aprendizaje (Pe), la herramienta de Matlab determina la dimensión 
%de entrada del problema de clasificación, a partir del número de filas de
%la matriz Pe.

%El segundo parámetro corresponde a los targets o salidas deseadas (el 
%proceso de aprendizaje es supervisado), a partir de esta matriz o vector
%la herramienta determina el número de salidas de la red.

%Con el tercer campo de parámetros se configura el número de capas ocultas
%y el número de neuronas de cada capa oculta [# de neuronas primera capa 
%oculta # de neuronas segunda capa oculta ..... # de neuronas n-ésima 
%capa oculta]

%Con el cuarto campo se configura el tipo de función de transferencia de
%cada capa (ocultas y de salida)

%El quinto campo configura la función de entrenamiento de la red,
%'traingd' es el algoritmo de gradiente descendente, solo se configura el
%parámetro de 'lr' rata de aprendizaje; 'traingdm' es el algoritmo de
%gradiente descendente con momento se configura 'lr' y 'mc' parámetro de
%momento; 'traingda' es el algoritmo de gradiente descendente con 'lr'
%variable, se configura los parámetros de 'lr_inc' 'lr_dec'; 'traingdx'
%el mismo algoritmo anterior pero con momento. Del algoritmo de gradiente
%conjugado hay varios métodos, cada uno tiene parámetros para configurar,
%pero dependen de concer adecuadamente los métodos, entre ellos se resaltan
%'traincgf' actualización Fletcher-Reeves, 'traincgp' actualización
%Polak-Ribiére, 'traincgb' actualización Powell-Beale, 'trainscg'
%gradiente conjugado escalado. 'trainbfg' algoritmo de Quasi-Newton es una
%alternativa al gradiente conjugado. Otro algoritmo utilizado
%frecuentemente es el algoritmo de Levemberg-Maquardt 'trainlm'.  Los
%problemas alrededor de estos algoritmo son el costo computacional y el
%almacenamiento de la información cuando se manejan muchos datos.


%Con la instrucción help newff pueden ver otras parámetros configurables a
%para crear una red feedforward



red.adaptFcn='trains';       %entrenamiento batch, 'trains' entrenamiento secuencial
red.divideFcn='dividerand';  %Este campo permite configurar la función que 

red.divideParam.trainRatio=0.8; % (80%) de ejemplos para ntrenamiento
red.divideParam.valRatio=0.1;  %porcentaje (10%) de ejemplos para validación
red.divideParam.testRatio=0.1; %validacion
red.trainParam.lr=0.01;     %rata de aprendizaje
red.trainParam.mc=0.29;     %configura el parámetros momento
%red.trainParam.lr_inc=1.1; %configura el parámetro de incremento de la
                             %rata de aprendizaje variable
%red.trainParam.lr_dec=0.25; %configura el parámetro de decremento de la
                             %rata de aprendizaje variable

red.trainParam.goal=0.0001;  %valor mínimo deseado del error cuadrático medio 

                           %parámetro de parada el proceso de aprendizaje 
red.trainParam.epochs=1500;
[red,tr,Y,E]=train(red,Pe,Te); %Instrucción para el entrenamiento de la red


finalmete utilizas sim(red,evalua); donde evalua es cualquiere ejemplo que quieres saber si lo identifica o no, creo que retorna un 1 si lo clasico y -1 si no lo clasifico asi sabes si la red apendio o no.... suerte


----------



## juanka1592 (Dic 27, 2011)

Hola ingecar!


Gracias por tu respuesta. 

La red neuronal me ha servido para clasificar compuestos. Tenía X sensores que me daban una salida, y se hicieron varias mediciones. Entonces tenía una matriz mxn (m medidas, n sensores).

Lo primero que tenía que hacer era un preprocesamiento de los datos, donde la varianza en cada clase disminuyese (o sea, entre muestras del mismo tipo/compuesto) y que la varianza entre clases (es decir, entre diferentes grupos de compuestos) se vea incrementada. Así se puede reducir el número de sensores, y por tanto las dimensiones del problema. 

Una vez seleccionados los sensores, se procedía a la creación, entrenamiento y validación de la red neuronal, como tú bien lo has explicado. Tenía una matriz de targets y otra de mediciones (ahora reducida), en donde la matriz de salida menos la matriz de targets debería dar cero (porque se supone que deben ser las mismas matrices).

Todo esto ya lo he hecho y presentado. Siento decirte que tu respuesta me llega un poco tarde. Sin embargo agradezco mucho tu ayuda!


----------

