Mostrando entradas con la etiqueta Redes Neuronales Artificiales. Mostrar todas las entradas
Mostrando entradas con la etiqueta Redes Neuronales Artificiales. Mostrar todas las entradas

martes, 20 de noviembre de 2012

[RNA] Reporte Final

Descripción del Proyecto


El proyecto a desarrollar en ésta materia consistio en crear una librería basada en redes neuronales que permita realizar predicciones de datos.

La entrada de datos era indistinta, poder ingresar información de diversos tipos, normalizada previamente, y obtener como salida un valor nuevo o pronóstico de acuerdo al análisis de la serie de tiempo de entrada.

Mas concretamente, el objetivo de la red neuronal es detectar patrones de delincuencia basandonos en los historiales de eventos pasados para así poder predecir el posible aumento o disminución de actividad delictiva en ciertas zonas. El objetivo adicional es realizar un análisis más profundo que nos permita predecir en cuáles zonas es mas probable que aumente la actividad delictiva y en cuales sea probable que disminuya.



Contribuciones al proyecto


Mis contribuciones al proyecto fueron siempre más orientadas a la programación de la red neuronal. Por lo que mis contribuciones consistieron en lo siguiente:
  • Programación del perceptrón
    • Se programo una neurona simple binaria
    • Actualización a neurona simple multidimensional
    • Implementación de capas
    • Red neuronal multicapa
    • Aprendizaje persistente simple

Arquitectura de la red


A base de un poco de investigación establecimos la arquitectura de nuestra red neurona. Tomamos 6 valores de entrada, para ellos nos basamos en dividir nuestro periodo de observación de 1 año en 12 meses, y de ahí tomar muestras de 6 meses para predecir un séptimo mes. 




Esté fue el enfoque principal, sin embargo, también es posible tomar en cuenta periodos de observación en diferentes escalas, ya sea 6 días, 6 semanas o 6 años.




Obviamente es necesario utilizar una red multicapa, ya que las redes multicapa tiene la particularidad de aproximar problemas no lineales. Gracias a la lectura científica que realicé en dias anteriores, concluí que las redes neuronales multicapa con una capa oculta y una capa de salida son muy recomendadas para problemas de pronóstico y análisis de series de tiempo, entonces, se decidio utilizar una red neuronal de 3 capas, una de entrada, una oculta y una de salida.
La cantidad total de nodos establecida fue 15.

Proceso de aprendizaje


Los métodos de predicción utilzan el algoritmo de backpropagation. Sin embargo, no se pudo implementar el algoritmo de backpropagation.

El proceso de aprendizaje que se había establecido fue:

  • Normalizar los datos de entrada entre 0 y 1
  • Generar los pesos de cada neurona, valores entre -1 y 1
  • Procesar entrada y pesos (producto punto), y calcular activación
  • Aplicación de función sigmoidal
  • Realizar el proceso feedfoward (capa por capa)
  • Una vez obtenida la salida, calcular el error final
  • Aplicar backpropagation y modificar los pesos de acuerdo al error de cada capa.
  • Procesar la siguiente entrada con los nuevos pesos

Aprendizaje persistente

Simplemente consistió en almacenar los pesos de cada neurona en un archivo de texto y posteriormente cargar los mismos cuando se desee utilizar la neurona para procesar otras entradas

Red Multicapa


La red multicapa fue muy sencilla, una red completamente conectada hacia adelante, capa por capa (feedfoward). Regla delta como función de aprendizaje y función sigmoidal para procesar la activación y calcular la respuesta de la neurona.



Repositorio


La liga al repositorio es: https://github.com/rafaellopezgtz/neurored
Ahí se puede ver el avance del código y los commits realizados por los miembros del equipo.


Referencias
http://www4.rgu.ac.uk/files/chapter3%20-%20bp.pdf
http://www.karlbranting.net/papers/plummer/Paper_7_12_00.htm


Concluye el reporte.

martes, 13 de noviembre de 2012

[RNA] Redes Neuronales

Haciendo referencia al proyecto que he venido desarrollando, el tema que elegí para lectura científica fue:


One-Hour-Ahead Load Forecasting Using Neural Network
Predicción de la carga (eléctrica) una hora adelante.
Autores:

  • Tomonobu Senjyu, Member, IEEE, 
  • Hitoshi Takara
  • Katsumi Uezato
  • Toshihisa Funabashi, Senior Member, IEEE

Introducción


El documento hace referencia a la importancia que tiene de predecir la carga total a la que será expuesta una instalación eléctrica durante su periodo de planeación y operación.
Multiples compañias realizan ya este tipo de procedimientos mediante técnicas convencionales, sin embargo, el comportamiento de la carga durante un periodo establecido de tiempo no es lineal.
Para tener el éxito esperado es necesario utilizar una red neuronal de estructura compacta y con un periodo de entrenamiento corto, es por ello que los autores se centran solo en predecir el comportamiento de la carga una hora adelante, en lugar de otros métodos que intentan predecir el mismo comportamiento pero 24 horas por delante.
El entrenamiento es sencillo, se aplica un factor de correción de acuerdo a una comparación realizada con datos similares de días diferentes, asi de logra un entrenamiento eficiente.

El utilizar este sistema de comparación de información con datos similares en días diferentes elimina la no linealidad de los datos, los datos similares son promediados para mejorar la precisión de la predicción.

Selección de los datos de días similares


Se utiliza un método llamado norma euclidiana la cual permite comprender al similitud de los datos, ésto se logra estudiando el coeficiente de correlación existente entre los datos ambientales del sistema y la carga de poder antes de aplicar la norma euclidiana.
La ecuación utilizada es:

[1]

Donde L(t-k) es la curva de carga en el dia de la predicción, L^P(t-k) es la curva de carga en un día similar &deltaL^t-k es la desviación de la carga entre la carga de poder del día de la predicción y la carga de poder en un día similar.
w(i)(i=1-3) es el factor de peso.

En otros métodos se utilizan como variables de la norma euclidiana las temperaturas máximas y mínimas del día de la predicción, sin embargo, dichas variables tienden a tener una rápida variación en ciertas situaciones por lo que es posible obtener una tasa de error muy alta.
En el método propuesto se subtituye las temperaturas por la carga de poder.

La red neuronal

Estructura

La red neuronal se alimentara, para su entrenamiento, de los datos de días similares; su entrada principal será la información obtenida durante el día de la predicción.
La estructura propuesta para la red neurona es multicapa. Generalmente una red neuronal con tres capas tiene la capacidad de aproximar funciones no lineales porque se incrementa el número de nodos ocultos, por ello se utiliza un modelo de tres capas donde cada capa esta completamente conectada hacia adelante. Se tiene una entrada de 9 elementos y 20 nodos ocultos, y se obtiene un solo dato de salida.
Ésta es el diagrama de la estructura de la red neuronal.

[1]

Procedimiento de aprendizaje y predicción

El método de predicción utilza el algoritmo de backpropagation. La red neuronal es entrenada con la información de 30 días antes del día de la predicción, lo cual es una cantidad de información muy grande.
También es posible utilizar la información de 60 días antes si se desean realizar predicciones de un año en el futuro.
Si el día de la predicción se cambia, es necesario reentrenar la red neuronal por completo. El procedimeinto utilizado es el siguiente:
  1. Determinar el rango de información necesario para la predicción
  2. Determinar los límites de selección de días similares para un día de aprendizaje. Por lo general 30 días similares desde el día antes del aprendizaje, si es posible, de un año antes.
  3. Seleccionar los días similares para el primer día de aprendizaje.
  4. Realizar backpropagation para los N días similares.
  5. Realizar backpropagation para todos los días dentro del rango de aprendizaje
  6. Realizar 200 iteraciones de backpropagation sin un límite específico.
  7. Seleccionar los días similares, para el día de la predicción.
  8. Seleccionar las variables de entrada.
  9. Realizar la corrección de predicción.
  10. Obtener la curva de predicción. 

Simulación

Para realizar simulaciones de las predicciones antes de su aplicación real, se pueden seguir 4 posibles casos:

  1. Predecir la curva de carga utilizando un modelo de regresión simple. Se utiliza la temperatura y la carga utilizada.
  2. Predecir la curva de carga utilizando la información de días similares. La red neuronal no se utiliza, es puramente estadístico.
  3. Predecir la curva de carga utilizando un método sin proceso de entrenamiento y aprendizaje, para ello se utiliza la información de días similares.
  4. Predecir la curva de carga utilizando un método con proceso de entrenamiento y aprendizaje, para ello se utiliza la información de días similares.

En la siguiente imagén se puede ver la comparación delas lecturas reales con la de la red neuronal

[1]

En la imágen no se puede notar muy bien, pero podemos notar que las líneas de predicción y la línea real estan completamente empalmadas, lo que indica la efectividad del sistema


Conclusión

Pues quedó mas claro el concepto de predicción de datos leyendo este tema, pienso que es posible utilizar alguno de los método aqui propuesto para realizar un modelo de predicción más general.
Pienso que es posible retomar los métodos de entrenamiento propuestos para aplicarlos a mi proyecto y asi lograr algo más sólido y eficiente en la predicción de otro tipo de eventos.


Referencias


martes, 9 de octubre de 2012

[RNA] 2. Reporte de Avances

En esta entrada explico los avances con los que he contribuido al proyecto de la clase de redes neuronales.

Descripción del proyecto


Recordando un poco, el proyecto consiste en desarrollar una libreria basada en redes neuronales que permita realizar predicciones de datos.


Mas concretamente, detectar patrones de delincuencia basandonos en los historiales de eventos pasados para así poder predecir el posible aumento o disminución de actividad delictiva en ciertas zonas.


El objetivo adicional es realizar un análisis más profundo que nos permita predecir en cuáles zonas es mas probable que aumente la actividad delictiva y en cuales sea probable que disminuya.


Contribuciones


Primeramente dedique algo de tiempo a desarrollar una neurona, el primer paso fue desarrollar una neurona que fuera capaz de separar datos linealmente. Con ésta neurona se pueden realizar clasificaciones simples de información.

La neurona esta en el repositorio, la siguiente imagén muestra una gráfica con la clasificación de la información:




El siguiente paso consistió en desarrollar un sistema de aprendizaje, en éste caso es un aprendizaje simple basado en la regla delta, para probar si el sistema de aprendizaje era exitoso realizé algunas pruebas con compuertas lógicas, la siguiente imágen muestra las compuertas lógicas AND y OR, la salida de la neurona es 1 o 0 dependiendo de las entradas, en éste caso el aprendizaje fue exitoso:


Compuerta AND

Compuerta OR

Vale la pena mencionar que el siguiente paso consistió en realizar multicapas, el sistema multicapas funciona. Mediante un archivo de configuración es posible generar multiples capas, sin embargo, existe un problema entre la interconexión de las mismas; ésto lo pude constatar al intentar entrenar la neurona utilizando la compuerta XOR.
En éste caso la configuración fue de 3 capas, con la siguiente configuración:

  • Capa 1, 2 neuronas, Aprendizaje 0.1
  • Capa 2, 2 neuronas, Aprendizaje 0.1
  • Capa 3, 1 neurona, Aprendizaje 0.1
Los resultados no fueron los óptimos ya que para todos los casos obtuve siempre una salida 0:


Compuerta XOR


Para el siguiente paso se planea implementar backpropagation, sin embargo, planeamos implementarlo solo para efectos de práctica y conocimiento general, ésto lo explicaré un poco más adelante.


Investigación

La siguiente actividad realizada consistió en la recolección de información. Con base a la información logramos establecer la estructura básica de nuestra red neuronal.

Para empezar, las entradas de nuestra red pueden ser de muy variados tipos, por ejemplo:
  • Escalas (nominal, intervalo, o relación)
  • Observaciones
    • Series de tiempo
  • Variables relacionadas
La salida producida consistiría en algun aumento o disminución en los valores de escala, el siguiente o siguientes valores adicional en dada serie de tiempo o algúna conclusión obtenida de la conclusión delas varibles relacionadas.



Nosotros elegimos como entradas las observaciónes en una serie de tiempo, por ejemplo:
  • Robos cada día.
  • Homicidios por mes
Y la salida sería la observación u observaciones posteriores, por ejemplo, si nuestra entrada fueran las observaciones en cada mes de un año, entonces necesitaremos una red con una capa incial de tamaño 12, una neurona por cada mes.
El tamaño de la capa de salida depende del número de observaciones que deseemos tener al final.

Por ahora nuestra salida consistiría en datos binarios, es decir, un vector de 1 y -1 que indican si la serie de tiempo tiende a subir o a bajar, en pocas palabras, una tendencia. Posteriormente la salida sería un dato análogo entre 1 y -1 que indicaría la magnitud del cambio y finalmente traducir ese valor análogo según la escala de valores en la serie de tiempo.


También se establecio un modelo de entrenamiento simple. Dado que estamos trabajando con series de datos existentes, podemos utilizar datos anteriores para entrenar, y calcular valores ya existentes, asi pues, los pasos serían:
  1. La entrada es una observación vieja, por ejemplo, datos del año 2010 para calcular los del año 2011
  2. Como conocemos los valores del 2011, comparar dichos valores con la salida de la red y calcular el error.
  3. Utilizar backpropagation para modificar los pesos y reducir el error en observaciones posteriores.
  4. Mover la serie de datos hacia adelante una vez para mostrar el siguiente patrón.

Como tipo de aprendizaje elegimos el tipo no supervisado, ésta es la razón por la que ponemos en tela de duda el método de entrenamiento antes descrito, ya que, un aprendizaje no supervisado no tiene una salida esperada, sino que la salida se basa en identificar patrones (ideal), entonces realizar backpropagation resultaría complicado.


Pendientes

Las conclusiones anteriores son el diseño básico de la red, asi pues, faltarían especificar algunas cosas un poco más detalladamente, por ejemplo:
  • Función de activación a utilizar
  • Número de capas ocultas
  • Elegir un mejor método de entrenamiento
  • Parámetros de entrenamiento
  • Combinar los anteriores y elegir el que mejores resultados proporcione.
Referencias

jueves, 9 de agosto de 2012

[RNA] 1. Pronostico de Patrones de Delincuencia

Tomada de http://blog.analyticstraining.in/archives/260


OBJETIVO


Utilizar una red neuronal para predecir actividad delictiva en una zona o en un lugar mediante reconocimiento de patrones.

PROCEDIMIENTO


La información de entrada sera una serie de tiempo, de le ensenara a la red neuronal el historial en un tiempo determinado, y se obtendrá una salida. Los resultados se convertirán en información pasada la cual pasara a ser ahora la entrada de la red neuronal y así obtendremos nuevos datos sucesivamente

  • Lenguaje de programación Python


RESULTADO


Generar mapas de calor que permitan visualizar los resultados.

Tomada de http://supermodelcity3.blogspot.mx/2011/07/interesting-graphic-for-traffic-flow.html

REFERENCIAS