jueves, 22 de noviembre de 2012

[AUTOMATIZACIÓN] Tarea 7 de Laboratorio.

Para esta ultima entrada de laboratorio se escogió un problema del libro de la compañera Cecilia (cuyo nombre no recuerdo), el problema P11.26 dice:

Considerar el sistema de tercer orden

Verificar si el sistema es observable. Si lo es, determinar la matriz de ganancia del observador que se requiere para situar los polos en:

Primero que nada identificamos las matrices:

A:






B:





C:



D es 0.

Primero necesitamos saber si el sistema es observable. Se dice que el sistema es observable si la matriz de observabilidad tiene un rango = n y su determinante es diferente de 0.

Mediante el uso de Octave se puede obtener tal matriz con la función "obsv(A, C)".

Se incluyen las matrices A y C y se obtiene la matriz de observabilidad:


Ahora se obtiene su rango con la función "rank(m)" donde "m" es una matriz, aunque al ser un sistema de tercer orden se sabe que su rango es 3, se incluye la comprobación:

Y ahora se obtiene su determinante mediante la función "det(m)" donde "m" es una matriz, recordando un poco, el determinante debe ser diferente de 0:

Se sabe que el sistema es observable, y ahora se determinará la matriz de ganancia del observador "Le".

Se escribe un vector "S" con los lugares de los polos, y mediante la función "place(sys, p)" de octave se encuentra la matriz "Le" del observador, donde "sys" es nuestro sistema (matrices "A" y "C") y "p" es el vector de los lugares de los polos deseados (matriz "S"):

La matriz de ganancia del observador es:


Fuentes:

martes, 20 de noviembre de 2012

Reporte final de preyecto



Reporte


Miembros del equipo:

Emmanuel
Raùl
Adan
Carmnen

[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