Skip navigation

Identificación de ejemplos mal clasificados

Recordando el pseudocódigo presentado anteriormente, podemos ver que es necesario identificar cuáles son los ejemplos que están mal clasificados porque la información que ellos proveen será utilizada para modificar el hiperplano separador.

Inicializar w con valores aleatorios
Mientras no se clasifiquen todos los patrones correctamente y no se llegue a la cantidad máxima de iteraciones:
   Ingresar un patrón x a la red.
   Si x fue clasificado incorrectamente:
     Modificar w para rotar el hiperplano con el fin de tener más posibilidades de clasificar x correctamente.

Este proceso requiere recorrer el conjunto de datos con un for obteniendo para cada uno de ellos la salida del clasificador (la clase inferida). Esta salida es comparada con la clase real del ejemplo en cuestión, y en el caso de que sean diferentes podemos afirmar que el mismo está mal clasificado. Por ejemplo, si la clase real era 1 y la salida obtenida es 0, o si la clase real era 0 y la salida obtenida es 1.

En el siguiente pseudocódigo los vectores como x y w son escritos en negrita, los comentarios tienen el color verde, y los segmentos de pseudocódigo que aún no han sido completamente desarrollados aparecen en cursiva. El operador punto (·) denota la operación de producto interior entre dos vectores, es decir, la suma de los productos componente a componente de los vectores.

# 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.
Inicializar w con valores aleatorios
Mientras no se clasifiquen todos los patrones correctamente y no se llegue a la cantidad máxima de iteraciones:
    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;    
        end if;

        #comparar la clase obtenida con la real
        #Si son distintas, actualizar el hiperplano
        If (clase_calculada <> clase_real):
            Modificar w para rotar el hiperplano con el fin de tener más posibilidades de clasificar x correctamente.
    end for;