En este video, se presenta el laboratorio no calificado, Agrupamiento difuso. Lea las instrucciones antes de abrir el laboratorio. Allí encontrará varios archivos. El archivo correspondiente al notebook del laboratorio se llama Agrupamiento C-means. Los otros archivos contienen datos para utilizar en el laboratorio. El contenido del laboratorio se explica a continuación. Una de las tareas usuales en aprendizaje de máquinas es el agrupamiento. La tarea consiste en tomar un conjunto de datos, generalmente extenso, y construir subconjuntos de esos datos, con la condición de que los elementos que estén en uno de esos subconjuntos sean parecidos entre sí y distintos a los que estén en otro conjunto. Si lo que se quiere es construir conjuntos difusos, la tarea es entonces de agrupamiento difuso. El algoritmo más popular para hacer algoritmo difuso es el fuzzy c-means, que tiene muchas variaciones. En este laboratorio mostramos cómo se utiliza el algoritmo que está implementado en skfuzzy para hacer agrupamiento difuso fuzzy c-means. Iniciamos con la importación de las librerías y luego vamos a trabajar con un ejemplo simple de una sola dimensión, datos que están en R. Y el ejemplo que hemos construido es el ejemplo de los números enteros del 1 al 100. Queremos agrupar en tres grupos los números 1, 2, 3, etcétera, hasta 100. Y diríamos intuitivamente que deberíamos construir un conjunto de los números pequeños, los medianos y los grandes. La instrucción c-means es la que está implementada en la librería para lograr ese agrupamiento. Debemos entregarle los datos que, en este caso, los hemos guardado en un arreglo, donde hemos construido un arreglo con los números del 1 al 100, y tenemos que entregar los otros argumentos, el número de conjuntos, que hemos establecido en tres, un parámetro m, que suele ponerse en dos y que controla qué tan abrupto es el cambio de un conjunto difuso al siguiente. Y los otros dos son parámetros para controlar el criterio de parada del algoritmo, un número máximo de iteraciones o un cambio entre una iteración y la siguiente. El algoritmo entrega muchos resultados y en este laboratorio nos vamos a concentrar en tres de ellos. El primero son los centros de los conjuntos difusos que ha encontrado. El segundo son los grados de pertenencia a los conjuntos creados. Y tenemos por aquí otro que llamamos fpc, que es un coeficiente que explicaremos más adelante. Ejecutamos el algoritmo para obtener tres conjuntos y el resultado, mostramos primero los centros, quedaron en 50, 15 y 85, y los hemos graficado, se ven los tres conjuntos difusos. Observen que el primero de los datos, 50, correspondería al centro del segundo conjunto, el que está en azul. Luego sale el 15.8, que sería el correspondiente al conjunto amarillo, digamos, y el 85 sería el centro del conjunto verde. El algoritmo entrega esos conjuntos difusos en un orden, no necesariamente en el orden que uno lo esperaría, los pequeños, los medianos y los grandes. De hecho, una nueva ejecución del algoritmo puede entregarnos centros parecidos, conjuntos parecidos, pero en otro orden diferente. Esto tiene que ver con un componente aleatorio del algoritmo y es los centros iniciales que utiliza la primera iteración asigna aleatoriamente unos centros y, a partir de ahí, el resultado de la ejecución puede diferir ligeramente de una ejecución a la siguiente. Pasemos a un segundo ejemplo. Un ejemplo con dos dimensiones que tenemos guardado en un archivo, el archivo se llama data.csv. Los datos entonces ahora están en R2. Tenemos 601 datos construidos a propósito para este laboratorio, son datos ficticios que hemos graficado aquí. Al graficarlo, podemos ver que valdría la pena agrupar estos datos en tres conjuntos, quizás uno por aquí, otro por aquí y otro por acá. Son datos ficticios creados para probar el algoritmo. Lo que hacemos entonces es, después de haber leído el archivo, correr el algoritmo de la misma forma especificando tres conjuntos y el algoritmo nos entrega los tres centros. Estamos graficando, no imprimiendo aquí los tres centros. Por ejemplo, hay un centro en 1.02 y 7.05. 1.02 7.05 correspondería al centro de este conjunto. Podemos aprovechar las funciones de pertenencia que están en U y la forma de los conjuntos difusos para graficarlos. La gráfica sería ahora en R a la 3, porque los datos están en R2, más la función de pertenencia, pues los graficamos en R a la 3. Una pregunta usual a la hora de hacer agrupamiento es ¿cuántos conjuntos son los adecuados para hacer? ¿Cuál es el mejor número de conjuntos para construir dados unos datos? El algoritmo implementado en esta librería calcula un coeficiente que se denomina el coeficiente de partición difusa, que ayuda a describir qué tan bien clasificados quedaron los datos. Es un número entre 0 y 1, y entre más cercano esté al 1, entonces el coeficiente lo que indica es que está mejor clasificado, si está cerca del 1. Entonces, lo que uno puede hacer es correr el algoritmo en varias ocasiones, pidiéndole primero que tome un número de conjuntos, que construya un número de conjuntos, luego otro número, luego otro número, y comparar el resultado de este coeficiente. Vamos a hacer eso con los mismos datos de prueba del ejemplo anterior. Voy a subir para mostrar de nuevo esos datos. Estos son las datos con los que estamos jugando. Y gráficamente, podemos ver que parece buena idea obtener tres conjuntos. Bueno, vamos entonces a correr el algoritmo en varias condiciones. Vamos a entrar en un ciclo para hacer el agrupamiento en varias ocasiones y lo que vamos a cambiar es el número de conjuntos que le pedimos al algoritmo que construya. Vamos a pedirle primero que construya dos, luego tres, luego cuatro, etcétera, hasta nueve conjuntos, y en cada una de las ejecuciones guardamos el valor del coeficiente fpc y luego graficamos ese valor de fpc. El resultado es el que estoy mostrando en este momento. Cuando se construyeron dos conjuntos, ese coeficiente arrojó el valor de 0.8. Cuando se construyeron tres conjuntos, algo así como 0.9. Y bueno, así para el resto de ejecuciones del algoritmo. Claramente, el valor de fpc más alto, más elevado, corresponde a tres. Tenemos ahora en el laboratorio un ejemplo con datos reales. Normalmente, cuando trabajamos you con datos reales, los resultados no son tan fáciles de interpretar ni tan limpios como los dos ejemplos que hemos presentado hasta este momento. Vamos a utilizar un caso real muy conocido, el problema de clasificación de las flores tipo iris. Es un clásico de los problemas de agrupamiento. El problema consiste en lograr clasificar 150 flores diferentes a partir de cuatro datos de esas flores, que son los que están aquí listados, longitud y ancho de sépalo y de pétalo. Se sabe dónde deben quedar clasificadas esas flores, porque you están clasificadas en tres grupos, setosa, virgínica y versicolor. Entonces, este ejemplo de agrupamientos se utiliza para comprar muchos tipos de agrupamiento, para ver si un algoritmo funciona mejor que otro. En este caso, hemos guardado los datos correspondiente al problema iris en el archivo irislabel. Lo traemos y construimos tres conjuntos difusos y lo que queremos es visualizar qué tan bien quedaron agrupados esos conjuntos. El problema es que los datos you están en R a la 4, son cuatro datos por cada flor. Si le sumamos a eso la función de pertenencia, entonces tenemos un problema en R a la 5 imposible de graficar directamente. Lo que hemos hecho es graficar de a parejas de datos. Los datos de cada una de estas flores los hemos llamado X0, X1, X2 y X3, y lo que hemos hecho, con las instrucciones que ustedes pueden ver abajo, es graficar, por ejemplo, X1 versus X0. Y hemos utilizado un color diferente para cada una de las tres categorías iris y un recuadro rojo para mostrar el centro, realmente la proyección de los centros entregados por el algoritmo fuzzy c-means. Ustedes pueden evaluar qué tan fácil o qué tan difícil es hacer este agrupamiento, porque fíjense que aquí los datos, por ejemplo, se ven mezclados en esta proyección y en esta también. Entonces son problemas mucho más difíciles de clasificar que los primeros ejemplos de este laboratorio. Tenemos también otra colección de ejemplos para que ustedes exploren libremente.