Revolución IA

La Inteligencia Artificial está llamada a protagonizar la próxima Revolución tecnológica

Inicio Sobre Revolucionia Temas Para saber más Contacto

Ejemplo de clasificación con un perceptrón (III)

Fernando P.    13/09/2017

Temas:  Aplicaciones    Fundamentos

Última parte del ejemplo de clasificación de clientes en una empresa. En la primera parte se hizo la introducción al problema y se describieron los datos que vamos a usar. En la segunda parte se describió con precisión el clasificador que se pretende construir.

En esta última parte vamos a ver la resolución completa del problema mediante la creación de un programa escrito en lenguaje C que es capaz de entrenar el clasificador que hemos definido usando los datos de ejemplo que tenemos.

El programa
Hemos escrito un programa C bastante sencillo denominado percep1.c que puede compilarse con casi cualquier compilador de C. Puede descargarse aquí.

El programa implementa el algoritmo de entrenamiento supervisado para clasificadores que ya describimos en un artículo anterior. Se implementa adaptado a este problema específico, es una implementación muy sencilla.

Las tareas básicas que ejecuta el programa son:

El programa admite como parámetros de entrada el número de clientes a clasificar bien de forma consecutiva para poder detener el entrenamiento (parámetro -n) y el nombre de fichero que contiene nuestros datos de prueba.

La modificación de los parámetros Clasificador ejemplo ventas y consultas
Una cuestión que no se había especificado cláramemte a la hora de describir el algoritmo general para aprendizaje supervisado era cómo debían modificarse los parámetros del clasificador cuando un caso de entrada no clasificara bien.

Esta cuestión depende bastante de cada problema y cada estructura concreta del clasificador. Para este caso la modificación de los parámetros  a  y  b  es muy sencilla:

Sea  S = aV + bC

Si  S > 0  entonces reducimos el valor de  a  y  b  proporcionalmente a  V  y  C
Si  S0  entonces aumentamos el valor de  a  y  b  proporcionalmente a  V  y  C

Básicamente, si consideramos a  S  como una función de  a  y  b,  lo que hacemos es ir cambiando poco a poco el valor de los parámetros hasta que  S  cambie de signo.

El cambio se hace en varias etapas usando una magnitud de cambio fija que está controlada por una constante dentro del programa (RESOLUCION_PARAMETROS). Un valor muy pequeño de esta constante hace que sea posible afinar mucho los valores de  a  y  b  a costa de muchas iteraciones. Un valor grande permite funcionar con pocas iteraciones pero se corre el riesgo que no poder afinar lo suficiente.

Resultado de la ejecución del programa
Una vez ejecutado el programa con un valor de 100 para el número de clasificaciones consecutivas correctas que detienen el entrenamiento, obtenemos algo como esto:


 Iteración  Parámetros (a b)  Cliente  Clase  Clasificador  Nuevos parámetros (a b)
------------------------------------------------------------------------------------
      1      0.0998   0.8414     35      2         2 = OK
      2      0.0998   0.8414     29      2         2 = OK
      3      0.0998   0.8414     13      2         2 = OK
      4      0.0998   0.8414     27      2         2 = OK
      5      0.0998   0.8414     23      1         2            -0.1353   0.8264
      6     -0.1353   0.8264      1      1         2            -0.1353  -0.1736
      7     -0.1353  -0.1736      5      1         1 = OK
      8     -0.1353  -0.1736      7      1         1 = OK
      9     -0.1353  -0.1736      9      1         1 = OK
     10     -0.1353  -0.1736     25      2         1             0.1067  -0.1655
...
...
...
    190      0.0379  -0.5967      3      1         1 = OK
    191      0.0379  -0.5967     25      2         2 = OK
    192      0.0379  -0.5967      5      1         1 = OK
    193      0.0379  -0.5967     11      1         1 = OK
    194      0.0379  -0.5967     18      2         2 = OK
    195      0.0379  -0.5967     20      2         2 = OK
    196      0.0379  -0.5967      9      1         1 = OK
    197      0.0379  -0.5967     23      1         1 = OK
    198      0.0379  -0.5967      1      1         1 = OK

*** Final por clasificación acertada de 100 clientes consecutivos ***

Porcentaje acierto clientes entrenamiento:  100%
Porcentaje acierto clientes prueba:         100%

El resultado completo de la ejecución del programa puede descargarse aquí, así como el fichero con datos de ejemplo.

Se puede ver con facilidad en el resultado del programa que el algoritmo ha ido modificando poco a poco los parámetros  a  y  b  del clasificador hasta que ha dado con unos que le han permitido clasificar bien 100 clientes aleatorios consecutivos, que deberían cubrir completamente el conjunto de entrenamiento.

El proceso de entrenamiento resulta en los siguientes valores finales de los parámetros del clasificador:

a = 0.0379     b = -0.5967

Con estos valores de los parámetros, todos los clientes del conjunto de entrenamiento y todos los del conjunto de prueba clasifican correctamente. Como las últimas 100 iteraciones han tenido que ser correctas por imposición nuestra, el programa sólo ha necesitado 98 iteraciones para dar con estos parámetros.

En la segunda parte del artículo se proporcionó una interpretación matemática al clasificador y se asimiló el problema a la localización de un hiperplano que separara ambas clases de clientes. Conviene notar que hay infinitas soluciones (hiperplanos) a este problema y la que hemos localizado es una de ellas, aunque todas serán muy similares.
Gráfico ventas / consultas
Por otro lado, puede suceder que el programa localice unos parámetros que consigan el 100% de clasificación correcta para los clientes en el grupo de clasificación pero que no se consiga el 100% en los clientes en el grupo de prueba, valores en torno a 95% son posibles.

Es perfectamente normal que el programa no consiga el 100% en el conjunto de prueba porque son datos que no ha podido usar para entrenar el clasificador. El entrenamiento le ha obligado a generalizar (todo el clasificador funciona con sólo dos parámetros) y es posible que la generalización no funcione bien con casos complicados que no ha visto durante el entrenamiento.

Conclusión
Hemos planteado un problema muy sencillo que es susceptible de ser resuelto mediante un clasificador muy simple que debe ser entrenado usando aprendizaje supervisado. A pesar de la sencillez del problema, el proceso general de entrenamiento no difiere mucho respecto a un caso mucho más complicado y en este ejemplo es muy sencillo ver cómo opera exactamente.

El programa que hemos escrito para resolver el problema ha funcionado perfectamente y es sencillo de modificar para probar otras situaciones.

Buena parte de las ideas e incluso código concreto visto aquí es perfectamente utilizable en la resolución de problemas más complejos, que se verán más adelante.


Lo fundamental del ejemplo resuelto es ver cómo podemos construir clasificadores sin modelos matemáticos a priori, símplemente usando casos con clasificación ya conocida para forzar al algoritmo de aprendizaje a que busque los valores de los parámetros que permitan que el clasificador funcione por la vía de la generalización.


Para saber más:

Página de la Wikipedia en la que trata sobre el concepto general de aprendizaje supervisado, que es el paradigma básico que se usará para construir el clasificador en nuestro problema de ejemplo.

El aprendizaje supervisado es una forma de aprendizaje automático o machine learning, que engloba otros mecanismos de aprendizaje por la vía de la generalización.

Nuestro ejemplo es lo suficientemente sencillo como para que pueda resolverse considerando que buscamos un hiperplano que divida el espacio en dos clases. En esta página de la Wikipedia se proporciona la definición formal de hiperplano.



 

Inicio Powered by NetBSD
 
HTML5
 
En general, todo el contenido de este sitio web es original, salvo referencias o enlaces a otros sitios web y citas o reproducciones expresamente presentadas como tales.

No está permitida la reproducción ni la copia del contenido de este sitio web sin el permiso expreso de la propiedad del mismo.

Este sitio web no utiliza cookies ni ningún otro mecanismo para almacenar información en los navegadores de los visitantes ni para realizar seguimiento de los mismos.

2017,2018 Revolucionia.net
Sobre Revolucionia
Temas
Para saber más
Contacto