BIOINFORMATICA

UNIVERCIDAD NACIONAL
APLICACIONES DEL
D E L S A N TA

PERCEPTRON
INGENIERIA DE SISTEMAS
E I N F O R M AT I C A

En
R AelMsiguiente
OS SAM informe
A M E se
JOpresentan
N A T H Alas
N
aplicaciones del perceptron en java
CICLOV

1 BIOINFORMATICA

PERCEPTRON DE 2 ENTRADAS
El Perceptrón es un tipo de red neuronal artificial desarrollado por Frank
Rosenblat, también puede entenderse como perceptrón la neurona artificial y
unidad básica de inferencia en forma de discriminador lineal, que constituye este
modelo de red neuronal artificial, esto debido a que el perceptrón puede usarse
como neurona dentro de un perceptrón más grande u otro tipo de red neuronal
artificial.

Definición

El concepto más básico que permite comenzar a entender un perceptrón es
asociarlo a un sensor, ya sea de temperatura, humedad, nivel de líquidos, grado
de acidez, coloración, densidad, etc. Es, en esencia, un dispositivo que, dada la
presencia de uno o varios fenómenos de entrada, permite representarlo(s)
mediante una señal de salida fácilmente reconocible. Ahora bien, si dotamos a
este simple dispositivo de varios canales de entrada (dos o más), le habremos
agregado una notable mejoría ya que podrá discriminar o diferenciar entre
distintos fenómenos de entrada variables y entregarnos una salida que
representará el criterio diferenciador o resultado de la interacción entre las
entradas.

El modelo biológico más simple de un perceptrón es una neurona y vice versa. Es
decir, el modelo matemático más simple de una neurona es un perceptrón, La
neurona es una célula especializada y caracterizada por poseer una cantidad
indefinida de canales de entrada llamados dendritas y un canal de salida llamado
axón. Las dendritas operan como sensores que recogen información de la región

La suma ponderada de las entradas debe producir un valor mayor que para cambiar la neurona de estado 0 a 1. Aprendizaje En el perceptrón. 1 . el primero utiliza una tasa de aprendizaje mientras que el segundo no la utiliza. es el 'umbral'. es un término constante que no depende del valor que tome la entrada. existen dos tipos de aprendizaje. sean éstas biológicas o de sustrato semiconductor (compuertas lógicas). Una neurona sola y aislada carece de razón de ser. formando una red. El valor de (0 o 1) se usa para clasificar como un caso positivo o un caso negativo. el axón de una neurona entrega su información como "señal de entrada" a una dendrita de otra neurona y así sucesivamente. El perceptrón usa una matriz para representar las redes neuronales y es un discriminador terciario que traza su entrada (un vector binario) a un único valor de salida (un solo valor binario) a través de dicha matriz. esto en el caso de los seres vivos. Donde es un vector de pesos reales y es el producto punto (que computa una suma ponderada). Su labor especializada se torna valiosa en la medida en que se asocia a otras neuronas. Normalmente. El perceptrón que capta la señal en adelante se entiende formando una red de neuronas. el cual representa el grado de inhibición de la neurona. o dando un nivel bajo de actividad a la neurona del rendimiento.2 BIOINFORMATICA donde se hallan y la derivan hacia el cuerpo de la neurona que reacciona mediante una sinapsis que envía una respuesta hacia el cerebro. Esta tasa de aprendizaje amortigüa el cambio de los valores de los pesos. en el caso de un problema de clasificación binario. El umbral puede pensarse de como compensar la función de activación.

Se definen algunas variables primero:  el denota el elemento en la posición en el vector de la entrada  el el elemento en la posición en el vector de peso  el denota la salida de la neurona  el denota la salida esperada  el es una constante tal que Los dos tipos de aprendizaje difieren en este paso. el aprendizaje es modelado como la actualización del vector de peso después de cada iteración. la regla de actualización de los pesos será la siguiente: Por lo cual. Para considerar una neurona al interactuar en múltiples iteraciones debemos definir algunas variables más:  denota el vector de entrada para la iteración i  denota el vector de peso para la iteración i  denota la salida para la iteración i .3 BIOINFORMATICA El algoritmo de aprendizaje es el mismo para todas las neuronas. Para el primer tipo de aprendizaje. lo cual sólo tendrá lugar si la salida difiere de la salida deseada . utilizando tasa de aprendizaje. utilizaremos la siguiente regla de actualización de los pesos: Para el segundo tipo de aprendizaje. todo lo que sigue se aplica a una sola neurona en el aislamiento. sin utilizar tasa de aprendizaje.

util.*. public class Main { public static void main(String[] args) { . Perceptron de 2 entradas en java El ámbito de java para comenzar a crear códigos para que el perceptron aprenda: package redneuronal2. Sin embargo si los datos no son separables linealmente. Novikoff (1962) probo que el algoritmo de aprendizaje converge después de un número finito de iteraciones si los datos son separables linealmente y el número de errores esta limitado a: . la línea de algoritmo anterior no se garantiza que converja. import java.4 BIOINFORMATICA  denota un periodo de aprendizaje de iteraciones En cada iteración el vector de peso es actualizado como sigue:  Para cada pareja ordenada en  Pasar a la regla de actualización El periodo de aprendizaje se dice que es separable linealmente si existe un valor positivo y un vector de peso tal que: para todos los .

cont=0. for(i=0.j<=n.i++){ if(j!=n){ . int n.aux.i.pow(2. grupo=1.j.i<=filas-1. int[][]TablaAnd= new int [filas][n+1]. n=2.out.n). System. cont2=0.5 BIOINFORMATICA Scanner R = new Scanner (System. aux=filas.filas.in).println(" PERCEPTRON DE 2 ENTRADAS ").j++){ aux=aux/2.grupo.GENERAMOS LA TABLA AND PARA 2 PESOS Aquí generamos la tabla and para 2 pesos en el cual tenemos que tener en cuenta las filas y columnas de la tabla AND: filas=(int)Math.cont2.cont.. 1. for(j=0.

}else{ TablaAnd[i][j]=-1.h++){ if(TablaAnd[i][h]==-1){ cont2++. } }else{ for(int h=0. }else{ TablaAnd[i][j]=-1. } } if(cont2==0){ TablaAnd[i][j]=1.h<n. cont++. } if(grupo%2!=0){ TablaAnd[i][j]=1.6 BIOINFORMATICA if(cont==aux){ cont=0. grupo++. cont++. } }} .

}else{ System.7 BIOINFORMATICA } System.out.out.out.j++){ for(i=0. .out.j<=filas-1.out. } 2.i<=n.print(" "+TablaAnd[j][i]+" ").i++){ if(TablaAnd[j][i]==1){ System. double[]peso=new double[n+1].println(). } } System. int Xo=-1.e=0. for(j=0.-INGRASANDO LOS DATOS Ingresamos los datos como son los pesos. el factor de aprendizaje y el umbral System.out.println(" Para "+n+" pesos").print(TablaAnd[j][i]+" "). double Wo=0.println(" TABLA AND").println(). System.

} System. e=R.println("Ingresa el valor del umbral"). System.nextDouble().i<=n.out.. String salidas="".INCIA EL BUCLE PARA HALLAR LOS PESOS IDEALES Aquí se inicia el bucle para hallar los pesos ideales y si no sucede se usa el factor de aprendizaje para que la neurona aprenda double []salida=new double[filas+1]. int aux2=1. while(aux2!=0){ aux2=0.8 BIOINFORMATICA for(i=1.println("\nIngresa el peso "+i). int[]y=new int[filas+1]. peso[i]=R.it=0. 3.nextDouble().println("Ingresa el Factor de Aprendizaje").z.out.i++){ System.nextDouble(). .out. double SubSalida. Wo=R.

salida[j]=Math.9 BIOINFORMATICA z = 0.i<=n.println("Salida "+j+": "+salida[j] +"\ty="+y[j]).out.i++){ SubSalida=SubSalida+TablaAnd[j-1][i-1]*peso[i]. 4.round(salida[j]). if(y[j]!=TablaAnd[j-1][n]){ aux2=aux2+1. }else{ y[j]=-1..\n"). if(salida[j]>=0){ y[j]=1..println("\nCalculando las salidas. for(j=1. for(i=1.j<=filas. salidas="". salida[j]=salida[j]*100. } System.j++){ SubSalida=0.out.salida[j] =salida[j]/100.-GENERAMOS LAS SALIDAS DE ACUERDO A LA TABLA AND System. } salida[j]=SubSalida+Wo*Xo. .

out.println("\nLas salidas "+salidas+" no coinciden con la tabla\n"). System..i++){ peso[i]=peso[i]+(2*e*TablaAnd[z][n]*TablaAnd[z] [i-1]). if(aux2==1){ z=j-1..println(" ITERACIÓN "+(it+1)). }else{ System.println("\nLa salida "+salidas+" no coincide con la tabla\n").out..\n"). "+salidas. } }} 5. } System. for(i=1.out.println("Ajustando los pesos.HACEMOS EL AJUSTE DE LOS PESOS.out.i<=n. SI ALGUNA SALIDA NO COINCIDE CON LA TABLA if(aux2!=0){ if(aux2==1){ System.10 BIOINFORMATICA salidas=j+". .

System.println("*** PESO "+i+" : "+peso[i]).out.round(peso[i]).out. System.out.peso[i]=Math.out.println("El nuevo valor del peso "+i+" es: "+peso[i]).println().11 BIOINFORMATICA peso[i]=peso[i]*100.println("\nLAS SALIDAS COINCIDEN CON LA TABLA. } System. System.out.out.println("\n").round(Wo). System.println("*** UMBRAL(Wo): "+Wo).i<=n. }else{ System. } Wo=Wo+(2*e*TablaAnd[z][n]*Xo).Wo=Wo/100. } } } . los valores finales son: \n").out. for(i=1. System.i++){ System. it++.out.peso[i]=pes o[i]/100. Wo=Wo*100.println("\n** El Numero de iteraciones fue: "+it).Wo=Math.println("El nuevo valor del Umbral es: "+Wo).

12 BIOINFORMATICA } Aplicación de perceptron en java Aplicación de las salidas del perceptron .

13 BIOINFORMATICA PERCEPTRON DE N ENTRADAS .

j. aux=filas. public class Main { public static void main(String[] args) { Scanner R = new Scanner (System. . int n.GENERAMOS LA TABLA AND PARA N PESOS Aquí generamos la tabla and para N pesos en el cual tenemos que tener en cuenta las filas y columnas de la tabla : filas=(int)Math.j++){ aux=aux/2.out. cont=0.aux. for(j=0.j<=n. int[][]TablaAnd= new int [filas][n+1].n).*.cont. import java. System.i.cont2.pow(2.util.filas. n=2.in).println(" PERCEPTRON DE N ENTRADAS ")..grupo.14 BIOINFORMATICA El ámbito de java para comenzar a crear códigos para que el perceptron aprenda: package redneuronal2. 1.

} } if(cont2==0){ TablaAnd[i][j]=1. }else{ TablaAnd[i][j]=-1.h<n. grupo=1.15 BIOINFORMATICA cont2=0. grupo++.i++){ if(j!=n){ if(cont==aux){ cont=0.i<=filas-1. cont++. } if(grupo%2!=0){ TablaAnd[i][j]=1. for(i=0.h++){ if(TablaAnd[i][h]==-1){ cont2++. } }else{ for(int h=0. cont++. .

j++){ for(i=0.out.print(" "+TablaAnd[j][i]+" ").out.print(TablaAnd[j][i]+" ").-INGRASANDO LOS DATOS Ingresamos los datos como son los pesos.i++){ if(TablaAnd[j][i]==1){ System. for(j=0.out.j<=filas-1.i<=n. } 2.println(). el factor de aprendizaje y el umbral .println(" Para "+n+" pesos"). } } System. }else{ System. System. } }} } System.out.println(" TABLA AND").16 BIOINFORMATICA }else{ TablaAnd[i][j]=-1.out.

nextDouble(). Wo=R. double Wo=0.i<=n. int aux2=1.e=0. peso[i]=R. double[]peso=new double[n+1]. .i++){ System.z.17 BIOINFORMATICA System.out. String salidas="".out.println().it=0. int[]y=new int[filas+1].out.println("Ingresa el Factor de Aprendizaje").println("Ingresa el valor del umbral"). } System.INCIA EL BUCLE PARA HALLAR LOS PESOS IDEALES Aquí se inicia el bucle para hallar los pesos ideales y si no sucede se usa el factor de aprendizaje para que la neurona aprenda double []salida=new double[filas+1]. double SubSalida. 3. int Xo=-1.out.nextDouble(). for(i=1.println("\nIngresa el peso "+i).. System.nextDouble(). e=R.

-GENERAMOS LAS SALIDAS DE ACUERDO A LA TABLA System.18 BIOINFORMATICA while(aux2!=0){ aux2=0. } . 4.out. for(j=1.salida[j]=Math.salida[j] =salida[j]/100.round(salida[j]).println("\nCalculando las salidas.j++){ SubSalida=0. } salida[j]=SubSalida+Wo*Xo. salidas="". z = 0. for(i=1.\n").i++){ SubSalida=SubSalida+TablaAnd[j-1][i-1]*peso[i].i<=n. salida[j]=salida[j]*100.j<=filas. if(salida[j]>=0){ y[j]=1.. }else{ y[j]=-1..

\n"). SI ALGUNA SALIDA NO COINCIDE CON LA TABLA if(aux2!=0){ if(aux2==1){ System. "+salidas.println("Ajustando los pesos.. } }} 5. if(y[j]!=TablaAnd[j-1][n]){ aux2=aux2+1.. } System.HACEMOS EL AJUSTE DE LOS PESOS.19 BIOINFORMATICA System.out.. salidas=j+".out.out. System.out.println(" ITERACIÓN "+(it+1)). if(aux2==1){ z=j-1. .println("Salida "+j+": "+salida[j] +"\ty="+y[j]).out.println("\nLas salidas "+salidas+" no coinciden con la tabla\n"). }else{ System.println("\nLa salida "+salidas+" no coincide con la tabla\n").

Wo=Wo*100. it++. peso[i]=peso[i]*100.println("*** UMBRAL(Wo): "+Wo).println("El nuevo valor del Umbral es: "+Wo).i++){ peso[i]=peso[i]+(2*e*TablaAnd[z][n]*TablaAnd[z] [i-1]). .println("\nLAS SALIDAS COINCIDEN CON LA TABLA. } System. System.i<=n.round(peso[i]).Wo=Math.println(). for(i=1.i<=n.20 BIOINFORMATICA for(i=1.out.peso[i]=Math. } Wo=Wo+(2*e*TablaAnd[z][n]*Xo).out.out. System.println("El nuevo valor del peso "+i+" es: "+peso[i]). System.println("\n** El Numero de iteraciones fue: "+it).out.i++){ System. }else{ System.peso[i]=pes o[i]/100.out.round(Wo).Wo=Wo/100. los valores finales son: \n"). System.out.out. System.println("*** PESO "+i+" : "+peso[i]).out.println("\n").

21 BIOINFORMATICA } } } } INGRESAMOS LA CANTIDAD DE PESOS DEL PERCEPTRON .

22 BIOINFORMATICA INGRESAMOS LOS DATOS: .

23 BIOINFORMATICA OBTENEMOS LA SALIDAS: .