Unificación de ambos casos en una sola regla
Dado que la única diferencia entre ambas reglas es el signo de , podemos unificar ambas reglas en una sola en base a la clase calculada y la clase real.
Observemos lo siguiente:
- Cuando la clase real es 1 y la clase calculada es 0, y por lo tanto clase_real - clase_calculada = 1, el signo de
en la regla es positivo.
- Cuando la clase real es 0 y la clase calculada es 1, y por lo tanto clase_real - clase_calculada = -1, el signo de
en la regla es negativo.
Entonces podemos utilizar clase_real - clase_calculada para determinar el signo de en la regla:
Donde es la clase real e
es la clase calculada.
Con la definición de esta regla el algoritmo de entrenamiento del perceptrón queda totalmente definido:
# ejemplos es un vector de N elementos, con los datos de los ejemplos.
# clases es un vector de N elementos que contiene la clase real para cada ejemplo.
# ITE_MAX es la cantidad máxima de iteraciones
# alfa es la velocidad de aprendizaje
Inicializar w con valores aleatorios
iteraciones := 0;
cant_errores := 1; #se le debe dar un valor inicial para poder entrar al while
While (cant_errores > 0) and (iteraciones < ITE_MAX)
cant_errores := 0;
iteraciones := iteraciones + 1;
For i=1 to n
#obtener los datos
x := ejemplos[i];
clase_real := clases[i];
#calcular la clase en base al hiperplano
salida := w · x;
If salida > 0 then
clase_calculada := 1;
else
clase_calculada := 0;
#comparar la clase obtenida con la real
#Si son distintas, actualizar el hiperplano
If (clase_calculada <> clase_real) then
cant_errores := cant_errores + 1;
w := w + alfa * (clase_real - clase_calculada) * x;
end if;
end for;
end while;