Skip navigation

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;