Tema 7 Clustering Agrupamiento Clasificacion
Tema 7 Clustering Agrupamiento Clasificacion
Tema 7 Clustering Agrupamiento Clasificacion
no supervisada
[7.1] ¿Cómo estudiar este tema?
Esquema
Ideas clave
Para estudiar este tema deberás leer las Ideas clave que se presentan a continuación.
Puedes completar el estudio visualizando la lección magistral, revisando referencias y
bibliografía, así como accediendo a los recursos adicionales que se facilitan. Es muy
recomendable ver la lección magistral antes de realizar las actividades propuestas.
Clustering
Es un método de aprendizaje no supervisado que permite agrupar objetos en
clústeres o agrupamientos, cuyos miembros son similares entre sí en cierto modo.
Clúster
Es una colección de objetos similares entre sí y diferentes a los objetos que
pertenecen a otros clústeres.
Por ejemplo, no es lo mismo tratar de detectar el espacio donde hay una mancha de
combustible en el mar, espacio que puede tener una forma irregular, que el tratar de
obtener agrupamientos circulares y de similar tamaño con el fin de segmentar un grupo
de clientes para ofrecer productos.
Un ejemplo de este tipo es el algoritmo k-means (Qin et al., 2016). También hay
otro tipo de algoritmos que típicamente generan clústeres exclusivos, tales como los
métodos basados en la densidad que van incorporando nuevos objetos a un clúster
si la densidad de objetos en «los alrededores» supera un umbral. Los algoritmos
basados en densidad (en vez de en medidas típicas de distancia) son útiles para
generar clústeres de formas irregulares. Algunos de los algoritmos que generan
clústeres exclusivos más conocidos son mean-shift (Guo et al., 2018) y el DBSCAN
(Density-based spatial clustering of applications with noise) o agrupamiento
espacial basado en densidad de aplicaciones con ruido (Shen et al., 2016).
También existen algoritmos que generan clústeres en el sentido inverso, en este caso
denominados aglomerativos, los cuales generan en primer lugar los clústeres más
pequeños que se agrupan progresivamente para generar la estructura jerárquica
(Bouguettaya et al., 2015).
Medida de distancia
Pero hay otro tipo de medidas muy utilizadas también típicamente por algoritmos de
clustering no tan extendidas. A continuación, se describen algunas de estas medidas de
distancia conocidas como linkage measures (medidas de conectividad):
1
𝑑𝑖𝑠𝑡𝑎𝑣𝑒𝑟𝑎𝑔𝑒−𝑙𝑖𝑛𝑘 (𝐶𝐴 , 𝐶𝐵 ) = ∑ |𝑝 − 𝑝′|
𝑛𝐴 𝑛𝐵
𝑝∈𝐶𝐴 , 𝑝′∈𝐶𝐵
Siendo p y p’ los puntos en los que dos objetos se sitúan, CA y CB, dos clústeres con
un número de elementos nA y nB respectivamente, y tal que p Є CA y p’ Є CB.
Los algoritmos más simples de clustering son los que dividen el conjunto de objetos en
agrupaciones exclusivas de objetos teniendo como punto de partida el número de
clústeres que se desea generar y midiendo la similitud de los objetos en base a una
medida de distancia. El algoritmo más popular de este tipo es el algoritmo k-means.
Algoritmo K-means
Es un método iterativo basado en distancia que define k centroides de los k
clústeres que genera en cada iteración. Un objeto pertenece a un clúster o a otro en
base a su distancia a los centroides de los distintos clústeres. El centroide de un
clúster lo calcula como el valor medio de los puntos del clúster.
Una limitación del algoritmo es que solo trabaja con datos de valores reales. Solo se
puede aplicar cuando el cálculo de la media de los objetos está definido y, por tanto,
podría no ser aplicable cuando se manejan valores nominales. Una posible solución es
mapear el valor nominal a un valor numérico.
Algoritmo divisorio
Algoritmo aglomerativo
a
a
b
ab
b
cde
c c
d
d c
d e
En esta Figura 6 se representa cómo se agrupan por niveles los objetos en cada
iteración del algoritmo de clustering. Conforme el clúster tiene un mayor número de
objetos, la similitud entre sus objetos disminuye.
-
Nivel 4
Similitud
Nivel 3
Nivel 2
+
Nivel 1
a b c d e
Nivel 0
Los algoritmos divisorios son menos frecuentes que los aglomerativos. Una dificultad
que presentan es la decisión de cómo dividir un clúster con muchos elementos en
clústeres más pequeños, puesto que las posibles combinaciones de diferentes clústeres
a partir de un numeroso número de instancias son igualmente muy numerosas.
El cálculo en cada iteración de las distancias entre el nuevo clúster generado y el resto
se puede realizar de diferentes formas, tales como a través de la medida de la distancia
de enlace sencillo, enlace completo, promedio, etc.
1. Se comienza por el nivel 0 en el que se genera un clúster por cada uno de los N
puntos del conjunto inicial de instancias.
5. Si todos los objetos están en un único clúster, el algoritmo finaliza. En caso contrario
se continua en el paso 2.
s t u w
s 0 4 8 3
t 4 0 5 10
u 8 5 0 2
w 3 10 2 0
En primer lugar, se crean tantos clústeres como objetos hay (ver Figura 7). A
continuación, se busca el par de clústeres menos distantes entre sí, que son aquellos
cuya distancia es menor. Según la matriz de la Tabla 1, los clústeres correspondientes a
los objetos u y w son los más cercanos, dando lugar al clúster que se denomina Cu-w (ver
Figura 8).
t s u w Iteración 1
t s u w Iteración 1
Cu_w Iteración 2
A continuación, se calcula la distancia de este nuevo clúster Cu-w con el resto de los
clústeres, teniendo en cuenta la medida de enlace sencillo. Por tanto, habrá que tener
en cuenta para calcular la distancia al resto de clústeres, la distancia del punto más
cercano, sea w o u, al clúster objetivo. Así se obtiene la matriz de similitud mostrada en
la Tabla 2.
s t Cu-w
s 0 4 3
t 4 0 5
Cu-w 3 5 0
t Cu-w-s
t 0 4
Cu-w-s 4 0
t s u w Iteración 1
Cu_w Iteración 2
Cu_w_s Iteración 3
Como último paso solo queda unir los dos únicos clústeres existentes generando un
único clúster, y finalizando el algoritmo. El árbol generado se muestra en la figura 10.
t s u w Iteración 1
Cu_w Iteración 2
Cu_w_s Iteración 3
Cu_w_s_t Iteración 4
En muchos problemas no todos los clústeres son iguales de probables, no tienen por
qué tener el mismo número de individuos. Por este motivo, es necesario que también se
refleje la distribución de la población entre los clústeres.
Clustering probabilista
Dado un conjunto de instancias con sus atributos, el problema que se presenta es
conocer los parámetros que modelan el conjunto de k distribuciones de
probabilidad para los k clústeres, así como la probabilidad de población,
esto es, que el propio clúster tenga cierto número de instancias.
Un caso sencillo sería tener instancias de un único atributo y tres clústeres que se
modelan como una distribución normal con desviaciones media y estándar μA y σA para
el clúster A, μB y σB para el clúster B, así como μC y σC, para el clúster C. Las muestras se
distribuyen en los clústeres con las probabilidades pA, pB y pC. El problema consiste, por
tanto, en modelar esos clústeres, esto es, determinar los valores: μA,σA, μB, σB, μC. σC, pA,
pB y pC.
1. A cada objeto se le asigna el clúster cuyo centroide está más cercano (los centroides
en la primera iteración se suelen determinar aleatoriamente).
2. Una vez se asignan los objetos a cada clúster, se recalcula el centroide de tal manera
que la suma de las distancias de los objetos asignados al clúster al centroide sea
mínima.
Entonces se puede comenzar con valores «posibles» de esos parámetros que modelan
los clústeres, tal y como se «adivina» el centroide en el algoritmo
k-means en la primera iteración, y utilizar estos hipotéticos valores para calcular las
probabilidades de que cada instancia esté en un clúster. En la segunda etapa se pueden
utilizar estas probabilidades para reestimar los parámetros. Este proceso se repetiría
iterativamente. Así funciona el algoritmo EM (Expectation – Maximization).
𝑛 𝐾
𝑚 2
𝑓𝑚 = ∑ ∑ 𝑝𝑖𝑗 ‖𝑥𝑖 − 𝑐𝑗 ‖
𝑖=1 𝑗=1
Donde:
3. xi es la i-ésima instancia.
∑𝑛𝑖=1 𝑝𝑖𝑗
𝑚
𝑥𝑖
𝑐𝑗 =
∑𝑛𝑖=1 𝑝𝑖𝑗
𝑚
1
𝑝𝑖𝑗 = 2
‖𝑥 − 𝑐𝑗 ‖𝑚−1
∑𝑘𝑙=1 𝑖
‖𝑥𝑖 − 𝑐𝑙 ‖
El algoritmo Fuzzy C-means guarda similitud con el algoritmo EM, pero una diferencia
importante es precisamente el tipo de clúster objetivo. Tanto k-means como Fuzzy
C-means modelan los clústeres típicamente con forma circular, mientras que el
algoritmo EM emplea funciones probabilísticas dando lugar a los clústeres
probabilísticos modelados por funciones probabilísticas.
En esta ocasión vamos a probar varios algoritmos de clustering utilizando Python y las
librerías numpy, scikit-learn y matplotlib, que ya deberíamos tener todas
instaladas de los ejemplos de los temas anteriores. No vamos a utilizar pandas, puesto
que vamos a realizar pruebas generando datos sintéticos, es decir, en lugar de partir
de un dataset real, aprenderemos a generar nuestros propios datos para realizar
pruebas con los algoritmos. Para ello, nos basaremos en un ejemplo de Machine
Learning Mastery (ver Webgrafía al final de este tema).
Con el siguiente código creamos un dataset sintético de 1 000 muestras de datos con 2
características, las 2 con información (ninguna es redundante) y «etiquetadas» (aunque
esto se lo ocultaremos a los algoritmos de clustering) en 3 clases diferentes, con un
clúster por clase.
# definimos el dataset
X, y = make_classification(n_samples=1000, n_classes=3, n_featur
es=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, ra
ndom_state=4)
pyplot.show()
Veremos en un gráfico similar a este las tres clases diferentes en función de las dos
características (en los ejes X e Y), y con un color para cada clase. Vemos cómo cada una
está distribuida en único clúster (aunque esto no tiene por qué ser así, si no lo fuera la
dificultad del problema sería mayor para un algoritmo no supervisado):
# definimos el dataset
X, y = make_classification(n_samples=1000, n_classes=3, n_features=
2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_s
tate=4)
# definimos el modelo
model = KMeans(n_clusters=3)
# ajustamos el modelo
model.fit(X)
# asignamos un cluster a cada ejemplo
yhat = model.predict(X)
# obtenemos los clústers únicos
clusters = unique(yhat)
# definimos el dataset
X, y = make_classification(n_samples=1000, n_classes=3, n_featur
es=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, ra
ndom_state=4)
# definimos el modelo
model = MeanShift()
# ajustamos el modelo y predecimos las clases
yhat = model.fit_predict(X)
# obtenemos los clústers únicos
clusters = unique(yhat)
Probemos ahora con el DBSCAN, utilizando para los hiperparámetros un valor épsilon
de 0.3 y un número mínimo de elementos por clúster de 9:
# definimos el dataset
X, y = make_classification(n_samples=1000, n_classes=3, n_featur
es=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, ra
ndom_state=4)
# definimos el modelo
model = DBSCAN(eps=0.3, min_samples=9)
# ajustamos el modelo y predecimos los clústeres
yhat = model.fit_predict(X)
# obtenemos los clústers únicos
clusters = unique(yhat)
Tal y como podemos ver, con este valor de épsilon el algoritmo no es capaz de
diferenciar los tres clústeres, al no haber separación clara entre las fronteras de ellos, y
los identifica como uno único clúster, aunque sí nos permite identificar outliers.
# definimos el dataset
X, y = make_classification(n_samples=1000, n_classes=3, n_featur
es=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, ra
ndom_state=4)
# definimos el modelo
model = AgglomerativeClustering(n_clusters=3)
# ajustamos el modelo y predecimos las clases
yhat = model.fit_predict(X)
# obtenemos los clústers únicos
clusters = unique(yhat)
# definimos el dataset
X, y = make_classification(n_samples=1000, n_classes=3, n_featur
es=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, ra
ndom_state=4)
# definimos el modelo
model = GaussianMixture(n_components=3)
# ajustamos el modelo
model.fit(X)
# asignamos un clúster a cada ejemplo
yhat = model.predict(X)
# obtenemos los clústers únicos
clusters = unique(yhat)
Chiang, W.Y. (2018). Applying data mining for online CRM marketing strategy: An
empirical case of coffee shop industry in Taiwan. British Food Journal, 120(3), 665-
675. Disponible en https://doi.org/10.1108/BFJ-02-2017-0075
Holý, V., Sokol, O. & Černý, M. (2017). Clustering retail products based on customer
behaviour. Applied Soft Computing, 60, 752-762. Disponible en
https://doi.org/10.1016/j.asoc.2017.02.004
Kumar, M. S., Soundarya, V., Kavitha, S., Keerthika, E. S. & Aswini, E. (2019). Credit
Card Fraud Detection Using Random Forest Algorithm. 2019 3rd International
Conference on Computing and Communications Technologies (ICCCT), pp. 149-153.
Disponible en https://doi.org/10.1109/ICCCT2.2019.8824930
Subudhi, S. & Panigrahi, S. (2017). Use of optimized Fuzzy C-Means clustering and
supervised classifiers for automobile insurance fraud detection. Journal of King Saud
University - Computer and Information Sciences. Disponible en
https://doi.org/10.1016/j.jksuci.2017.09.010
Lo + recomendado
Lecciones magistrales
No dejes de ver…
+ Información
A fondo
Wiki del organismo SOCR (Statistics Online Computational Resource) que propone
actividades para experimentar con el algoritmo EM con el fin de obtener clústeres a
partir de puntos en espacios de 1D, 2D y 3D, haciendo uso de la herramienta SOCR, que
se puede ejecutar a través de esta misma página.
Webgrafía
Scikit-learn
Portal web creado por Jason Brownlee enfocado al aprendizaje de técnicas de machine
learning. Ofrece sus libros en formato eBook (de pago) con diferentes niveles de
precios en función de los contenidos incluidos. No obstante, incluye entradas en su blog
(sin coste alguno) con ejemplos prácticos paso a paso muy interesantes de aplicación de
técnicas de machine learning aplicadas mediante Python.
Test
7. Indica cuáles de las siguientes afirmaciones, respecto del algoritmo k-means, son
correctas:
A. El algoritmo k-means asigna los objetos a los clústeres en función de su
cercanía al centroide de cada clúster.
B. En cada iteración el algoritmo k-means mantiene fijos los centroides.
C. Es un algoritmo basado en densidad.
D. En cada iteración el algoritmo recalcula los centroides.
9. Indica cuáles de las siguientes afirmaciones son correctas respecto al algoritmo EM:
A. Es un algoritmo basado en densidades.
B. Tiene como base el modelo estadístico denominado mezclas finitas.
C. El objetivo es conocer los parámetros de una función probabilista general que
modela los clústeres.
D. En la fase de esperanza se calculan las probabilidades de pertenencia de las
instancias a los clústeres.
10. Indica cuáles de las siguientes afirmaciones son correctas respecto al algoritmo
Fuzzy C-means:
A. Una instancia puede pertenecer a más de un clúster si se aplica el algoritmo
Fuzzy C-means.
B. Las variables de entrada son conjuntos difusos.
C. Los clústeres se modelan como conjuntos difusos.
D. Permite obtener clústeres jerárquicos.