Full text
1
2
3 ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA Grado en Ingeniería Informática, Mención computación Sistema de recomendación basado en redes neuronales competitivas Recommendation system based on competitive neural networks Realizado por Teresa Rocha Muñoz Tutorizado por Juan Miguel Ortiz de Lazcano Lobato Departamento Lenguajes y Ciencias de la Computación UNIVERSIDAD DE MÁLAGA MÁLAGA, NOVIEMBRE 2016 Fecha defensa: El Secretario del Tribunal
4
5 Resumen: En la presente memoria se expone la implementación del algoritmo de un sistema de recomendación basado en el PCACL (Principal Components Analysis Competitive Learning), que es una red neuronal competitiva que realiza un análisis de componentes principales (PCA) en cada neurona. Además, se exponen las razones por las cuales se ha elegido este algoritmo como el núcleo del sistema de recomendación y la importancia de que se realice un buen entrenamiento de la red neuronal. La implementación del sistema de recomendación se ha realizado en el lenguaje de programación R con la ayuda del entorno de trabajo RStudio, de los cuáles se detallan las características más relevantes en el proceso de esta implementación. Finalmente se realizan y estudian las pruebas realizadas al sistema para comprobar si es fiable o no y si se podría mejorar el algoritmo. Palabras claves: Sistema de recomendación, redes neuronales competitivas, clasificación de productos, lenguaje de programación R. Abstract: In the present specification is exposed the recommendation system algorithm implementation based in PCACL (Principal Components Analysis Competitive Learning), it is a neural network competitive that make a principal components analysis (PCA) in each neuron. Also, it is exposed the reason why this algorithm has been chosen as the core of this recommendation system and the importance of a good training of the neural network. The implementation of the recommendation system has been performed in the programming language R with the help of the RStudio work environment, which details the most relevant characteristics in the implementation process. Finally, the tests performed on the system are carried out and analyzed to check whether it is reliable or not. Keywords: Recommendation system, competitive neural networks, product classification, programming language R
6
7 Índice Introducción ........................................................................................................ 9 Tecnologías a utilizar ....................................................................................... 11 Capítulo I. Documentación y formación ............................................................ 12 Redes neuronales artificiales ........................................................................ 12 Análisis de componentes principales (PCA) ................................................. 13 Modelo de red neuronal PCACL ................................................................... 14 Capítulo II. Implementación de la red neuronal ................................................ 15 Generación de los datos ............................................................................... 19 Preparación de los datos .............................................................................. 20 La red neuronal ............................................................................................. 21 Entrenamiento de la red neuronal ................................................................. 23 Capítulo III. Pruebas de la red neuronal ........................................................... 30 Conjunto de datos 1 ...................................................................................... 33 Prueba 1 .................................................................................................... 34 Prueba 2 .................................................................................................... 35 Conjunto de datos 2 ...................................................................................... 35 Prueba 1 .................................................................................................... 38 Prueba 2 .................................................................................................... 39 Prueba 3 .................................................................................................... 41 Prueba 5 .................................................................................................... 43 Capítulo IV. Diseño e implementación del sistema de recomendación ............ 44 Conclusiones .................................................................................................... 45 Objetivos logrados ........................................................................................ 45 Futuro del este trabajo .................................................................................. 45 Bibliografía ....................................................................................................... 46 Ilustraciones ..................................................................................................... 47
8
9 Introducción En este trabajo se presenta la realización y puesta en marcha de un sistema de recomendación basado en redes neuronales artificiales siguiendo un nuevo modelo que combina el aprendizaje competitivo clásico con un análisis de componentes principales (Principal Components Analysis, PCA) en cada neurona. Este nuevo modelo se denomina en inglés “Principal Components Analysis Compeitive Learning” (PCACL). (López Rubio, Ortiz de Lazcano Lobato, Muñoz Pérez, & Gómez Ruiz, 2004) Las redes neuronales artificiales, también denominadas redes neuronales o simplemente redes, son sistemas de aprendizaje y procesamiento automático basados en el comportamiento de las redes neuronales biológicas. Estos sistemas están compuestos por unidades de procesamiento, denominadas neuronas, que interactúan entre sí para producir una salida. El análisis de componentes principales, en adelante PCA, es una técnica estadística que reduce la dimensión de un conjunto de datos encontrando la proyección con la que mejor se representan los datos y manteniendo la mayor cantidad de información posible. (Análisis de componentes principales, s.f.) Por otra parte, los sistemas de recomendación son sistemas de filtrado de información que buscan predecir la preferencia que un determinado usuario tendría hacia un producto dado, de manera que sólo se filtren, y no se le presenten, elementos que el sistema considera que no le interesarán al usuario en cuestión. (Sistema de recomendación, s.f.) Hoy en día es posible encontrar sistemas de recomendación integrados en una gran cantidad de aplicaciones como sistemas de ventas, sistemas de información (sobre películas, libros, artículos de investigación, etc.) e, incluso, redes sociales, donde a los usuarios se les recomiendan productos u otros elementos marcados como preferidos por algunos de los usuarios conectados directamente con él (usuarios amigos). Entre los diversos enfoques a seguir a la hora de diseñar un sistema de recomendación algunos de los más utilizados han sido el del vecino más cercano (Nearest Neighborhood), que basa su recomendación en los vecinos más cercanos (Sistema de recomendación, s.f.), y el algoritmo de filtrado colaborativo, que basa su recomendación de productos en la información que proporcionan usuarios con gustos parecidos. Para tal fin, los usuarios suelen dividirse en grupos, compuestos por aquellos usuarios con una preferencia similar hacia un determinado grupo de productos. Finalmente, la recomendación, de un determinado producto a un usuario dado, se haría utilizando la información grupal. (Filtrado colaborativo, s.f.) Es muy normal que un sistema tenga registrados una amplia variedad de productos, pero los usuarios no suelen calificar o comprar más que una pequeña
16 Ilustración 2 Preparación del entorno y de los datos En la ilustración anterior se puede observar que al comenzar se cargan las librerías y se leen los scripts que contienen la definición de las funciones
17 necesarias para llevar a cabo las pruebas y generar el sistema de recomendación. Cabe destacar que, para realizar una acción u otra, es decir, iniciar el sistema de recomendación o de las pruebas, es necesario dar un valor válido a la variable acción. Estos valores se pueden observar en la instrucción “switch” y son “R0” para generar los datos del sistema de recomendación y ejecutar posteriormente su entrenamiento, clasificación y, como su nombre indica, recomendación; “P1” para ejecutar las primeras pruebas, es decir generar los datos de tipo 1 y posteriormente hacer las pruebas pertinentes como se verá más adelante y “P2” para ejecutar las segundas pruebas. Las acciones aquí definidas se verán con más detalle en los próximos capítulos. Ilustración 3 Ejecutar entrenamientos y predicciones
18 En este último script, “Ejecutar entrenamientos y predicciones”, se lleva a cabo la inicialización de la configuración de la red y de las variables de la misma, así como el entrenamiento y según se hubiese indicado anteriormente se realizará la clasificación y recomendación del sistema o las pruebas de tipo 1 o 2. Una vez la red se ha entrenado y se ha realizado la acción que correspondiese, los resultados y la configuración y variables de la red se almacenan para tener constancia de cómo se han obtenido los resultados, para ello es necesario modificar la variable “dir” en cada ejecución de este script, para que así, se almacenen las variables y los resultados de cada prueba en el directorio correcto. Estas tareas, llevadas a cabo en el sistema de recomendación, se pueden observar en su diagrama de flujo (ver ilustración 4). Ilustración 4. Diagrama de flujo del sistema de recomendación
19 Generación de los datos Los datos finales del sistema de recomendación con los que se entrenará la red y que se clasificarán para dar la recomendación para cada usuario han sido cuidadosamente generados para que se asemejen a datos de compra reales. Esto se ha realizado con la función “generarDatosRecomendacion” (ver ilustración 5) que recibe como parámetros la dimensión de los datos y el tamaño del conjunto de datos (número de usuarios). Ilustración 5. Generar datos para recomendación La función que genera los datos para el sistema de recomendación recibe la dimensión de la matriz que se debe generar, así como su tamaño y genera la matriz de datos inicialmente con ceros. Por cada columna, que correspondería a un vector de datos, se genera un vector aleatorio de ceros y unos y posteriormente se sustituyen los componentes de valor 1 por una muestra de una distribución normal de media 2 y desviación 1, esto se hace así puesto que normalmente los usuarios no suelen comprar o valorar todos los productos que se les ofrecen por lo que debe haber un mayor número de componentes nulas, esto se consigue con el primer vector de ceros y unos en el que al reemplazar sólo los unos, estos serán reemplazados por valores con media en 2 y desviación de 1 por lo que es probable que como resultado se obtengan más componentes nulas además de productos comprados o valorados 1, 2 o 3 veces. Se pueden obtener otros valores, pero estos tienen menor probabilidad por lo que aparecerán con menor frecuencia. La distribución uniforme devuelve datos reales por lo que, a la matriz de datos resultantes se le aplica la función “ceiling” para mantener sólo la componente entera de los valores de la matriz. Además,
20 se le aplica también la función “abs” para quedarnos sólo con valores positivos puesto que en compras no se pueden tener valores negativos y en el caso de las valoraciones no es recomendable dejar al usuario valorar negativamente. Además de este conjunto de datos, se generan otros, de prueba, que se verán con detalle en el capítulo III. Cabe destacar que, estos conjuntos de datos, forman una matriz en la que los usuarios se distribuyen por columnas y los productos por filas. Estos productos equivalen a la dimensión de los datos. Preparación de los datos Para que el sistema se entrene correctamente y posteriormente haga predicciones fiables, se debe realizar un preprocesamiento a los conjuntos de datos antes de pasarlos al sistema. El sistema PCACL, que se va a implementar, trabaja con vectores columna como datos de entrada. Por tanto, lo primero que se debe hacer es tener los datos correctamente almacenados en una matriz de vectores columnas. Así, los vectores de datos, corresponderán a una columna de la matriz. La preparación de los datos puede variar dependiendo de cómo sean recogidos. En este caso los datos han sido generados en R siguiendo la estructura de una matriz de vectores columnas. Si los datos no estuviesen preparados y hubiesen sido recogido de un sistema real sería necesario encontrar una función que sea capaz de leer dichos datos y posteriormente almacenarlos en una matriz con las características definidas anteriormente. Además, se tiene como objetivo introducir, al sistema, una simulación de datos reales y estos conjuntos de datos no suelen ser uniformes ya que los datos suelen ser de diferentes magnitudes. Es por ello que, los datos, van a ser normalizados puesto que, los valores del conjunto de datos que sean muy grandes influirán mucho en el resultado del sistema. Para normalizar el conjunto de datos se ha definido la función “normalizar” (ver ilustración 6) que, como su nombre indica, normaliza un conjunto de datos pasados como una matriz por parámetro.
21 Ilustración 6. Normalizar datos La tarea de normalizar tiene como finalidad que cada variable del conjunto de datos tenga una media de cero y una matriz de covarianzas de unos, para ello calcula la media o esperanza de los datos con la función “apply” de R, que es más eficiente que un bucle (Carmona, 2007). Del mismo modo se calcula la desviación típica de los datos. A esta función “apply” le pasamos la matriz de datos, indicamos la dimensión en la que queremos aplicar la función e indicamos que función se le quiere aplicar, para este caso utilizaremos la función “mean” para calcular la media de los datos y “sd” para calcular la desviación típica. Una vez se han calculado la media y la varianza de cada dimensión normalizamos los datos siguiendo la ecuación 𝑁 = (𝑋−(𝒆∗𝐼))/(𝒗∗𝐼) donde 𝑋 es la matriz de datos, 𝒆 es el vector de la media de cada dimensión, 𝒗 es el vector de la desviación típica e 𝐼 es la matriz identidad. Esta matriz 𝑁 de datos será la que se utilice como muestras de entrada para la red. La red neuronal Para comprender mejor el funcionamiento del entrenamiento de la red, primero, se va a describir cómo se obtiene la neurona ganadora de la red para un dato dado. El cálculo de la neurona ganadora se realiza en el script “Red neuronal”. Este script contiene la función “neuronaGanadora” (ver ilustración 7) que recibe como
22 parámetros un vector de datos correspondiente al dato para el cuál se desea hallar la neurona ganadora y la red neuronal, es decir, una variable que contiene, en una lista, los datos de cada neurona de la red. Los datos que se almacenan de cada neurona en la lista de la red son: el centroide, la matriz de covarianza, los vectores base y el número de vectores base relevante de cada neurona. Ilustración 7. Neurona ganadora Esta función celebra una competición entre las neuronas de la red y halla la neurona que mejor representa al dato de entrada que se le pasaba como parámetro. La neurona ganadora será aquella que tenga el mínimo argumento para la proyección ortonormal de la distancia entre el dato y el centroide de la neurona en cuestión sobre la base vectorial 𝐵 = {𝑏ℎ|ℎ = 1,…,𝑘}, donde 𝑘 equivale a la dimensión de los datos y 𝐵 es la matriz ortonormal de los vectores base de la neurona 𝑗. Esta proyección ortonormal 𝒛𝑗 𝑖(𝑡)= 𝑂𝑟𝑡ℎ(𝒙𝑖(𝑡)−𝒆𝑗(𝑡),𝑩𝑗(𝑡)), por
23 definición, se calcula como 𝑧 = ∑(𝒗′·𝒖𝒉)∗𝒖𝒉 𝐾 ℎ=1 , donde 𝒗 el vector distancia, 𝒖 la base ortonormal y 𝐾 es la dimensión de la base (López Rubio, Ortiz de Lazcano Lobato, Muñoz Pérez, & Gómez Ruiz, 2004). Esto se basa en el PCA que se explicaba en el capítulo I. Finalmente, la neurona ganadora será la que tenga el argumento mínimo que se obtiene con la función de R “which.min()”. (Carmona, 2007) Entrenamiento de la red neuronal Para realizar el entrenamiento de la red neuronal se han desarrollado diferentes scripts y funciones que se explicarán a continuación, así como su funcionamiento. Como se podía observar en la ilustración 1, tras ejecutar el script “Preparar entorno y datos” (ver ilustración 2), que carga y preprocesa los datos, se definen, en el scrpit “Ejecutar entrenamientos y predicciones” (ver ilustración 3), las variables de la configuración de la red. Al definir aquí estas variables, resultará muy fácil variarlas durante las pruebas para encontrar los valores óptimos, es decir, con los que mejor aprende la red. Las variables de la configuración de la red son: el número de épocas que se llevarán a cabo en el entrenamiento, la tasa de aprendizaje de la matriz de covarianza de las neuronas, la cantidad, 𝛼, de varianza que describen las neuronas y el número de neuronas que compondrán la red. Es importante elegir un número de épocas adecuado puesto que cuanto mayor sea el valor, más se ajustará la red a los datos de entrenamiento y si la red se ajusta demasiado a los datos, podrá no hacer buenas predicciones para otros datos de entrada. La tasa de aprendizaje de la matriz de covarianza influirá en cómo de rápido aprende una neurona, es decir, cuando una neurona es la ganadora para un dato de entrada, esta se actualiza para “acercarse” y representar mejor a ese dato de entrada. Si la tasa de aprendizaje es muy alta la neurona tenderá a representar muy bien al dato de entrada por lo que si era una equivocación la neurona intentará representar con mucha fuerza a un dato que no debería ser suyo y por lo tanto se cometerán más errores. En cambio, si la tasa de aprendizaje es muy baja, las neuronas aprenderán muy lentamente y podrían ser muy lejanas a datos que deberían representar. No se ha mencionado la tasa de aprendizaje del centroide puesto que es una constante que sigue la ecuación 𝜂𝑒=1 1+𝑀 , donde 𝑀 es el número de datos de entrada o usuarios en este caso, y se define antes de comenzar el entrenamiento como se verá más adelante.
24 El parámetro 𝛼 (“alpha”) indica la cantidad de varianza mínima que deben describir las neuronas. Elegir correctamente el número de neuronas de la red es muy importante puesto que determinará el número de grupos en los que se clasificarán los datos. Si este número es demasiado pequeño, la red agrupará datos que no tienen mucha correlación entre sí y a la hora de hacer las predicciones no será demasiado fiable. En cambio, si el número de neuronas es demasiado grande, se crearán grupos con pocos elementos o ninguno por lo que las predicciones que se hagan no serán relevantes. Una vez se tienen los datos normalizados y las variables de la configuración de la red almacenadas, se inicializan las variables de cada neurona de la red siguiendo las indicaciones del algoritmo del PCACL (López Rubio, Ortiz de Lazcano Lobato, Muñoz Pérez, & Gómez Ruiz, 2004) y con la ayuda de las funciones que se verán a continuación y que están definidas en el script “Inicializar Variables RN”. Primero se inicializan los centroides de las neuronas con la función “inicializarCentroides” que ha sido definida para realizar esta tarea (ver ilustración 8). Ilustración 8. Inicializar variables de la RN (centroides) Esta función se encarga de generar una matriz de vectores columna. Estos vectores serán los vectores iniciales que representan el centroide, 𝒆𝑗(0), de cada neurona 𝑗. Los centroides iniciales debe estar compuestos por pequeños valores aleatorios tanto positivos como negativos para que, al inicio, las neuronas se encuentren cercanas a los datos de entrada normalizados.
25 A continuación, se inicializan las matrices de covarianza de cada neurona con la ayuda de la función “inicializarMatrizCovarianzas” que se ha definido para generar y almacenar en una lista las matrices de covarianza de cada neurona de la red. Esta función genera, por cada neurona 𝑗, la matriz de covarianza inicial 𝑹𝑗(0), de forma que resulte una matriz no negativa, simétrica y aleatoria con los elementos de la diagonal principal cercanos a uno y el resto cercanos a cero (ver ilustración 9). Ilustración 9. Inicializar variables de la RN (matrices de covarianzas) Para generar dicha matriz se obtienen sus componentes de la diagonal principal con una distribución normal aleatoria de media 1 y desviación 0.1 y el resto de elementos seguirán una distribución también normal con desviación 0.1 pero con media 0. Como dicha matriz debe ser una matriz no negativa, se hayan los valores absolutos de los valores obtenidos. Para que sea simétrica se utilizan las funciones de R “lower” y “upper” con las que primero se introducen los elementos en la parte inferior de la matriz y posteriormente se copia la parte inferior de la matriz a la parte superior. También se introducen los valores de la diagonal principal obtenidos de la distribución normal de media uno. Así, resulta la matriz de covarianza simétrica aleatoria no negativa que se deseaba. A continuación, se calcula la matriz de bases vectoriales de cada neurona con la función “calcularBV”, definida en el script “Calcular bases vectoriales” (ver ilustración 10). Estas bases vectoriales son bases vectoriales ortonormales
32 Ilustración 16. Mostrar resultados 2D
33 Esta función muestra en una gráfica las neuronas en dos colores distintos marcado con una “x” el centroide y con una elipse la matriz de covarianza. Así mismo, los datos se representan con puntos del color de la neurona que los ha clasificado. Conjunto de datos 1 Para esta primera prueba se ha generado un conjunto de datos de 10 dimensiones en las que las dimensiones 4 y 5 corresponden a un conjunto de datos que forman un arco en dos dimensiones con radio 10 y el resto de componentes son 0. Con esta prueba se pretende comprobar que la red haya correctamente la dimensión intrínseca de los datos, es decir, debería obtenerse un número de vectores base igual a 2 puesto que sólo hay dos dimensiones que son relevantes. Para generar estos datos se ha definido la función “generarDatosArco” (ver ilustración 17) que dado un radio y un límite genera los datos de un arco con el radio dado y en el rango ∓𝑙𝑖𝑚, donde 𝑙𝑖𝑚 es el límite dado. Posteriormente se introducen estos datos en las dimensiones 4 y 5 de un conjunto de datos de 𝑛 dimensiones, donde 𝑛 viene dado por la variable “dim” en el que el resto de componentes tienen valor 0. Ilustración 17. Generar datos (arco)
34 El conjunto generado para esta prueba se encuentra guardado en la hoja “Datos 1” dentro del fichero de pruebas con el mismo nombre. La representación gráfica del arco contenido en las dimensiones 4 y 5 de estos datos se puede observar en la siguiente ilustración (ver ilustración 18). Ilustración 18. Representación gráfica del arco A continuación, se muestran las pruebas realizadas a este conjunto de datos. Prueba 1 La configuración utilizada para esta prueba es la siguiente: Número de épocas: 100 Tasa de aprendizaje de la matriz de covarianza: 0.6 Cantidad de varianza que describen las neuronas: 0.7 Número de neuronas: 2
35 En este caso lo más importante será la cantidad de varianza que describen las neuronas, se debe recordar que el conjunto de datos era un conjunto de dimensión 10 y el análisis de componentes principales que se le realiza a cada neurona debería dar un resultado de 2 como número de vectores base puesto que sólo son dos las dimensiones relevantes. Las dos neuronas de la red han dado un resultado de 6 como número de vectores base, esto nos indica que, en una segunda prueba, se debe ajustar mejor la cantidad de varianza que describen las neuronas. Prueba 2 La configuración de esta prueba es la siguiente: Número de épocas: 100 Tasa de aprendizaje de la matriz de covarianza: 0.6 Cantidad de varianza que describen las neuronas: 0.3 Número de neuronas: 2 En esta segunda prueba se ha disminuido la cantidad de varianza a 0.3 y se ha obtenido el resultado deseado de 2 vectores base en cada neurona. De estos resultados se puede concluir que la red halla correctamente la dimensión intrínseca de los datos. Conjunto de datos 2 Este conjunto de datos se ha generado de forma aleatoria con la ayuda de la función definida como “generarDatosSeparados” (ver ilustración 19).
36 Ilustración 19. Generar datos separados Esta función recibe un rango y un múltiplo, el rango es el valor que define dónde se encontrarán los conjuntos de datos en el eje X y en el eje Y se multiplican por la variable “multiplo”. Los datos del eje X se generan de forma secuencial con saltos de uno en uno, el primer grupo estará contenido entre el valor negativo del doble del rango y el valor negativo del rango y el segundo grupo entre el valor del rango y el doble del mismo. En cambio, para generar los datos del eje Y se ha utilizado la función de R “runif” que genera datos aleatorios siguiendo una distribución uniforme de 𝑛 datos dentro de un rango dado, los resultados de esta distribución se multiplican por la variable “multiplo” para realizar una mayor separación de ambos conjuntos de datos. Estos datos quedarán bien diferenciados dentro del primer y tercer cuadrante (ver ilustración 20).
37 Ilustración 20. Gráfica del conjunto de datos separados La función anteriormente definida (ver ilustración 19), además de generar la gráfica para el conjunto de datos generado, los normaliza y genera otra gráfica para representar el conjunto de datos normalizado (ver ilustración 21)
38 Ilustración 21. Gráfica del conjunto de datos separados normalizado A continuación, se muestran las pruebas realizadas para este conjunto de datos. Prueba 1 La configuración de esta primera prueba es la siguiente: Número de épocas: 100 Tasa de aprendizaje de la matriz de covarianza: 0.6 Cantidad de varianza que describen las neuronas: 0.9 Número de neuronas: 2 Como se podía observar en las imágenes anteriores, los datos se encuentran en dos grupos claramente diferenciados por lo que se ha escogido 2 como el número total de neuronas de la red y como se desea que las neuronas mantengan todas las dimensiones se ha escogido 0.9 como la cantidad de varianza que se desea que describan las neuronas.
39 La clasificación de los datos normalizados tras en el entrenamiento, se puede observar en la siguiente ilustración (ver ilustración 22). Ilustración 22. Gráfica de clasificación (datos 2, prueba 1) De la ilustración anterior se puede concluir que las neuronas no han aprendido bien, puesto que se deseaba que cada neurona representase un conjunto de datos diferente, pero al estar ambas inicializadas con una media cercana a 0 y al tener los datos una media de 0 (por estar normalizados), ambas neuronas, no han podido aprender correctamente en este entrenamiento, sólo una se ha llevado, prácticamente, el aprendizaje de todos los datos del conjunto. En las próximas pruebas se intentará mejorar la clasificación de estos datos mejorando la configuración de la red. Prueba 2 La configuración de esta prueba es la siguiente:
40 Número de épocas: 100 Tasa de aprendizaje de la matriz de covarianza: 0.1 Cantidad de varianza que describen las neuronas: 0.1 Número de neuronas: 2 El resultado de clasificar los datos tras el entrenamiento se puede observar en la siguiente ilustración (ver ilustración 23). Ilustración 23. Gráfica de clasificación (datos 2, prueba 2) En esta prueba se ha seleccionado una tasa de aprendizaje para la matriz de covarianza menor, así se le da más oportunidad de aprender a ambas neuronas puesto que se adaptan a los datos de entrada más lentamente. También se ha disminuido considerablemente la cantidad de varianza que describen las neuronas para forzar un mejor aprendizaje.
41 A pesar de que las neuronas han aprendido considerablemente bien se han realizado más pruebas con el objetivo de encontrar una configuración más óptima. Prueba 3 En esta prueba y la siguiente (prueba 4) se obtuvieron resultados similares a los anteriores (ver ilustración 24). La configuración para esta red es: Número de épocas: 200 Tasa de aprendizaje de la matriz de covarianza: 0.2 Cantidad de varianza que describen las neuronas: 0.2 Número de neuronas: 2 Ilustración 24. Gráfica de datos clasificados (datos 2, prueba 3)