Continuamos con la presentación del algoritmo de agrupamiento difuso Fuzzy c-means. Vamos a comenzar por organizar la información que tenemos, organizar las caracterÃsticas, y lo vamos a organizar en una matriz. Cada columna de esa matriz representa uno de los individuos y en cada columna lo que ponemos son las caracterÃsticas de ese individuo. Por eso esta matriz X, tiene tamaño d por n y cada columna es un individuo. Muy bien. Una vez hayamos realizado el agrupamiento difuso y hayamos construido los grupos, cada uno de esos grupos va a tener un centro. Esos centros los vamos a representar en esta matriz V. Cada columna de la matriz V es uno de los centros y estamos imaginando aquà que vamos a construir c grupos, c conjuntos difusos. Esa "c" es la que le da el nombre al algoritmo Fuzzy c-means. Entonces tenemos una matriz en donde en cada columna está uno de los centros, y como el centro es también un vector, tiene d caracterÃsticas. Por eso esta matriz es de tamaño d por c. Van dos matrices. Necesitamos una tercera matriz. En esta matriz vamos a consignar los grados de pertenencia de cada individuo a cada uno de los c grupos que estamos construyendo. Entonces es una matriz de tamaño c por n y lo que hay en cada celda es el grado de pertenencia. En particular en la celda i,k tendremos el grado de pertenencia del elemento k al grupo i. Esto es lo que hay que construir, los grados de pertenencia y los vectores; es lo que tenemos que descubrir. Partimos de la matriz X con los datos de cada individuo y debemos encontrar las matrices V y la matriz U. Esta matriz U, además, necesitamos que tenga unas ciertas caracterÃsticas para poder hacer una partición difusa. La matriz debe cumplir con dos condiciones. Si tomamos cada elemento y sumamos sus grados de pertenencia a cada uno de los conjuntos, es decir, si sumamos cada columna de esta matriz U, el resultado debe darnos 1 para hacer una partición difusa. Y si sumamos por filas, es decir, si sumamos todos los grados de pertenencia de todos los elementos a cada conjunto, debe darnos mayor que 0 para que el conjunto no esté vacÃo. Esas son condiciones que necesitamos. Pero hay montones de matrices U y matrices V que van a cumplir estas condiciones. ¿Cómo hacemos para saber si logramos un buen agrupamiento? Se utiliza esta medida para valorar qué tan bien hecho está ese agrupamiento, y es una medida muy interesante porque combina, da un balance entre las dos cosas. Esta doble sumatoria que ustedes ven allÃ, fÃjense que es una sumatoria de un producto de, por una parte, una distancia de un vector a un centro, X es el vector de un individuo, V es el vector de un centro, tenemos allà una distancia, y tenemos también el grado de pertenencia U de ese vector a ese conjunto. Entonces, si la distancia es pequeña, el grado de pertenencia debe ser grande. Si la distancia es grande, el grado de pertenencia debe ser pequeño. Este producto nos da un balance entre las dos cosas que tenemos que buscar y eso tenemos que hacerlo con todos los grados de pertenencia. El objetivo del algoritmo es ayudarnos a encontrar el mejor valor de esta J, que tiene además un parámetro m del que hablaremos más adelante. Y lo interesante es que podemos utilizar muchas normas allÃ, solo necesitamos que la norma sea diferenciable. En este vÃdeo solo jugaremos con la norma euclidiana. Ahora, Bezdek encontró cuáles son las condiciones de optimalidad, es decir, en qué momento logramos que esa J sea mÃnima. ¿Cuál es la mejor agrupación? Es la que cumple estas condiciones de optimalidad. El problema es el siguiente: que si vamos a calcular la matriz U, necesitamos la matriz V, como se puede ver en la primera ecuación. Le he puesto un superÃndice asterisco para denotar la condición de optimalidad. Para cumplir esa condición de optimalidad, si yo quiero calcular esa U_i,k necesito haber calculado antes la V. Pero, si quiero la V necesito la U como se ve en la segunda ecuación. Entonces, para encontrar las condiciones de optimalidad tenemos una doble dependencia entre esas matrices U y V. ¿Cómo lo hacemos? ¿Qué calculamos primero, la pertenencia o los centros? El problema está en que cada una depende de la otra. Y ahà es donde entra el algoritmo propuesto por Bezdek, el algoritmo de Fuzzy c-means, para resolver este problema. El algoritmo, en pocas palabras, es: diseñemos una primera matriz U y vamos mejorándola paulatinamente. El algoritmo que se ilustra en este diagrama de flujo tiene un ciclo en donde vamos a ir mejorando paulatinamente la pareja U y V. Iniciamos con una U_0, inicial, por supuesto. Esa matriz U_0 tiene que cumplir las condiciones que nosotros ya presentamos y entramos en un ciclo en donde aprovechamos la U_0 para calcular V_1; con V_1 calculamos U_1 y seguimos iterando, iterando, iterando hasta que queramos. Y el criterio de parada puede ser de doble condición. Uno muy utilizado es: "¿Qué tanto cambió la matriz U?". Veamos dos matrices U consecutivas, comparémoslas y veamos si cambiaron poquito. Si cambiaron poquito, salgamos del algoritmo que ya no estamos mejorando. O, la otra condición es por el número de veces que vamos en ese ciclo. Veamos el funcionamiento de este algoritmo. Tres ejemplos. Primer ejemplo: he creado aleatoriamente 100 números entre 0 y 1 en el intervalo [0, 1] y he utilizado el algoritmo para crear primero 2 grupos. Después lo he utilizado para crear 3 grupos, luego 5 y luego 10. Y esta es la forma que resulta, una forma suavizada y uno ve claramente dónde están los centros de cada uno de estos ejercicios. ¿Cómo funciona? ¿Cómo va evolucionando? Les muestro en este momento los resultados del algoritmo cuando quise construir 3 conjuntos y apenas iba en la primera iteración, luego en la tercera iteración, luego en la quinta y con 10 iteraciones, para que vean como va cambiando, paso a paso; esa definición de los conjuntos difusos se va suavizando y cubriendo adecuadamente todo el espacio. Va llegando a una convergencia que también está demostrada por Bezdek. Les dije que el algoritmo depende de un parámetro m, que es un exponente. ¿En que influye ese parámetro m? Hasta el momento les he presentado el caso en donde m es 2, el más usual. Si utilizamos m menor que 2, —tiene que ser mayor que 1—, tenemos conjuntos que se parecen cada vez más a conjuntos clásicos, y si aumentamos mucho el valor, la forma de esos conjuntos empieza a ser demasiado abrupta y no separa adecuadamente los casos. Por eso normalmente se utiliza el parámetro 2. Un segundo ejemplo. Vámonos a R2. Tenemos ahora dos caracterÃsticas distintas y he generado aleatoriamente 100 puntos, que son los que ustedes ven graficados. Los he generado con una distribución homogénea y ahora quiero construir 4 conjuntos difusos. Este es el resultado que arroja el algoritmo Fuzzy c-means. Esos son los 4 conjuntos difusos graficados ahora en R a la 3. Les he puesto 4 colores distintos para diferenciarlos, que se ven mejor por separado. Inclusive se ven mejor en curvas de nivel para encontrar exactamente dónde están los centros de cada uno de esos 4 puntos. Y como la distribución es homogénea, observen que los 4 puntos están como hacia los 4 extremos del espacio donde estamos buscando; el primero, el segundo, el tercero y el cuarto que acabo de señalar con el cursor. Un tercer ejemplo. Supongamos que ahora son estos los datos que tenemos, ya no están distribuidos homogéneamente. Imaginen, por ejemplo, que tenemos aquÃ, en la representación de nuestras edificaciones, que sé yo, el área construida y el consumo mensual de energÃa para poder proponer, de pronto, polÃticas de ahorro energético con miras a mejorar el desempeño de los objetivos de desarrollo sostenible. PodrÃa ser una razón, ¿verdad? Y queremos construir una serie de grupos. Yo les digo que queremos construir 2 grupos y ustedes los hacen casi que visualmente, pero pensemos que son 4. ¿Qué arroja el resultado del Fuzzy c-means? Esos 4 grupos, de nuevo, los podemos ver con 4 colores, pero tal vez la mejor forma de verlo es con las curvas de nivel. Y en las curvas de nivel he superpuesto también los datos originales para que ustedes puedan ver cómo en cada uno de los casos el centro de los 4 grupos va como a uno de los focos donde se acumulan los puntos originales. Y nos logra separar casos de conjuntos de individuos parecidos versus distintos. Las técnicas de agrupamiento difuso son muy útiles, muy populares y suelen utilizarse también en combinación con otras técnicas. Los invito a revisar también los conceptos de álgebra lineal, de distancia entre grupos para imaginar cómo esta técnica nos permitirÃa tener curvas de nivel de otras formas, no solo con esta simetrÃa radial, sino por ejemplo, elipses, romboides, rectángulos, etcétera. Muchas gracias.