martes, 20 de noviembre de 2012

[REDES NEURONALES] Reporte individual - Presentaciones finales

Para esta entrada pondré lo que se hizo en el proyecto.

Recordando un poco, el proyecto consiste en un sistema capaz de reconocer los caracteres de una placa de automovil, con el fin de poder usarlo para algún servicio como pago de multas o pago de tenencia, etc.

Reconocimiento de caracteres.

En la entrada anterior se centraba en como reconocer los caracteres de una imagen basándose en las características de la misma, ya sean bordes o centros.

Ahora se plantea utilizar la librería Open CV pero solo la parte del reconocimiento de tales características, ya que como tal, Open CV ya tiene implementado una red neuronal.

Puesto que no me salieron las cosas como esperaba, continué mejor con las funciones kernel.

Función Kernel o Núcleo:

Las funciones kernel son funciones matemáticas que se emplean en las Máquinas de Soporte Vectorial.

Estas funciones son las que le permiten convertir lo que sería un problema de clasificación no lineal en el espacio dimensional original, a un sencillo problema de clasificación lineal en un espacio dimensional mayor.



Para que las funciones kernel puedan ser consideradas candidatas a kernels, deben cumplir tres condiciones iniciales fundamentales; deben ser:

  • Continuas
  • Simétricas
  • Positivas

Estos son los requerimientos básicos para poder ser expresadas como un producto escalar en un espacio dimensional alto. El espacio dimensional simulado mediante las funciones kernel se define tomando a cada característica de los datos como una dimensión. Esto convierte a las entradas en un conjunto de puntos en un espacio euclidiano n-dimensional.

Algunos de los kernels llegaron hasta la fase de implementación y prueba. No obstante se trabaja sobre una familia de kernels muy vinculada a la teoría de algoritmos ensemble infinitos.

Las funciones probadas fueron seleccionadas a partir de sus características y fueron las más cercanas a lo que buscábamos, se realizaron 5 pruebas a cada una para ver que tan aproximadas a lo que buscamos estaban:

1. Kernel Lineal: El más sencillo de todos, se toma el producto de "x" y "y" mas una constante opcional "c". Muy utilizado en el PCA estándar.


2. Kernel Polinomial: Un kernel no estacionario:


3. Kernel de Tangente hiperbólica: También conocido como el Kernel de Sigmoid, muy utilizado en las funciones de activación en redes neuronales.


4. Kernel Racional Cuadrático: Es un kernel menos intensivo computacionalmente.


5. Kernel Multicuadrático: Al igual que el racional, se puede utilizar en casos no intensivos. Como en el caso del kernel de Sigmoid, es un ejemplo de un kernel definido no-positivo.


6. Kernel Multicuadrático Inverso: Mismo caso que el anterior pero es su inversa la que se busca.


7. Power Kernel: Conocido (aunque no rectificado) como el Kernel Triangular. Solo es definido y condicionalmente positivo.


8. Log Kernel: Es definido y condicionalmente positivo, particularmente interesante para casos de imagenes.


9. Kernel Generalizado T-Student: Ha sido probado que es un Kernel de Mercer. Usado para reconocimiento de patrones en imágenes.


Los resultados fueron variados como se muestran a continuación:

1. Kernel Lineal:





Como se ve, es inestable pero llega a semi estabilizarse.

2. Kernel Polinomial:







Prometedor en un principio, pero se inestabiliza, llegando a pocos positivos.

3. Kernel de Tangente hiperbólica:






Solo una prueba pasó con su mayoría positivos, los demás son demaciado bajos.

4. Kernel Racional Cuadrático:






Sus resultados parecen estar estables entre ciertos valores, pero muy bajos para lo que se busca.

5. Kernel Multicuadrático:






Aunque sus resultados no fueron tan altos como los de otras pruebas, este se mantuvo en su mayoría positivo y estable. Puede ser la única opción.

6. Kernel Multicuadrático Inverso:






Al igual que su contraparte, el multicuadrático, el inverso es muy estable y en su mayoría son positivos, a excepción de la última prueba que es un empate. Multicuadrático sigue como la única posibilidad.

7. Power Kernel:






No es muy inestable, pero demaciado malo para usarlo en este caso.

8. Log Kernel:






Algo inestable y muy bajo para utilizarlo.

9. Kernel Generalizado T-Student:






No se mantiene y llega a desestabilizarse muy rápidamente.

Finalmente se decidió utilizar la función kernel Multicuadratica, ya que aunque no tuvo resultados muy altos, siempre mantuvo estabilidad a sus valores y nunca bajó hasta la minoría de positivos.

Ademas de pequeños cambios en otros archivosde los compañeros.

Código de las funciones kernel:

Liga GitHub

Fuentes:

Kernel Functions for Machine Learning Applications
Función kernel

1 comentario:

  1. Reporte 10 pts; del código van 19, por el uso esporádico del control de versiones.

    ResponderEliminar