Clase 3: Modelación Descriptiva y K-Means
Es un tipo de aprendizaje que no requiere de etiquetas (las respuestas correctas) para poder aprender.
En nuestro caso nos enfocaremos en un caso particular de Modelación Descriptiva llamada Clustering.
Consiste en agrupar los datos en un menor número de
entidades
ogrupos
. A estosgrupos
se les conoce comoclusters
y pueden ser generados de manera global, o modelando las principales características de los datos.
Clustering: Consiste en buscar grupos de objetos tales que la similaridad intra-grupo
sea alta, mientras que la similaridad inter-grupos
sea baja. Normalmente la distancia es usada para determinar qué tan similares son estos grupos.
Los datos son separados en
K
clusters, donde cada punto pertenece exclusivamente a unúnico
cluster.
Se basan en la idea de continuar el crecimiento de un cluster a medida que la densidad (número de objetos o puntos) en el vecindario sobrepase algún umbral.
Los algoritmos basados en jerarquía pueden seguir 2 estrategias:
Aglomerativos: Comienzan con cada objeto como un grupo (bottom-up). Estos grupos se van combinando sucesivamente a través de una métrica de similaridad. Para n objetos se realizan n-1 uniones
.
Divisionales: Comienzan con un solo gran cluster (bottom-down). Posteriormente este mega-cluster es dividido sucesivamente de acuerdo a una métrica de similaridad.
Se ajusta cada punto a una distribución de probabilidades que indica cuál es la probabilidad de pertenencia a dicho cluster.
Los datos son separados en
K
Clusters, donde cada punto pertenece exclusivamente a un único cluster. AK
se le considera como unhiperparámetro
.
distancia intra-cluster
(within cluster).distancia inter-cluster
(between cluster).\[ Score (C,D) = f(wc(C),bc(C))\]
El puntaje/score mide la calidad del clustering \(C\) para el Dataset \(D\).
\[ Score (C,D) = f(wc(C),bc(C))\]
donde \(r_k\) representa el centro del cluster \(k\): \[r_k = \frac{1}{n_k} \sum_{x_i \in C_k} x_i\]
Distancia entre los centros de cada cluster.
Distancia entre todos los puntos del cluster y su respectivo centro.
Dado un número de clusters \(K\) (determinado por el usuario), cada cluster es asociado a un centro (centroide). Luego, cada punto es asociado al cluster con el centroide más cercano.
Normalmente se utiliza la Distancia Euclideana como medida de similaridad
.
Supongamos que tenemos tipos de manzana, y cada una de ellas tiene 2 atributos (features). Agrupemos estos objetos en 2 grupos de manzanas basados en sus características.
Matriz de Distancias al Centroide: (coordenada i,j
representa distancia del punto j
al centroide i
)
\[D^1 = \begin{bmatrix} 0 & 1 & 3.61 & 5\\ 1 & 0 & 2.83 & 4.24 \end{bmatrix}\]
\[G^1 = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 \end{bmatrix}\]
\[C_1 = (1,1)\] \[C_2 = (\frac{11}{3}, \frac{8}{3})\]
\[D^2 = \begin{bmatrix} 0 & 1 & 3.61 & 5\\ 3.14 & 2.26 & 0.47 & 1.89 \end{bmatrix}\]
\[G^2 = \begin{bmatrix} 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 \end{bmatrix}\]
Fortalezas
Debilidades
from sklearn.cluster import KMeans km = KMeans(n_clusters=8, n_init=10,random_state=None) km.fit(X) km.predict(X) ## opcionalmente km.fit_predict(X)
from sklearn.cluster import KMeans km = KMeans(n_clusters=8, n_init=10,random_state=None) km.fit(X) km.predict(X) ## opcionalmente km.fit_predict(X)
from sklearn.cluster import KMeans km = KMeans(n_clusters=8, n_init=10,random_state=None) km.fit(X) km.predict(X) ## opcionalmente km.fit_predict(X)
from sklearn.cluster import KMeans km = KMeans(n_clusters=8, n_init=10,random_state=None) km.fit(X) km.predict(X) ## opcionalmente km.fit_predict(X)
from sklearn.cluster import KMeans km = KMeans(n_clusters=8, n_init=10,random_state=None) km.fit(X) km.predict(X) ## opcionalmente km.fit_predict(X)
from sklearn.cluster import KMeans km = KMeans(n_clusters=8, n_init=10,random_state=None) km.fit(X) km.predict(X) ## opcionalmente km.fit_predict(X)
from sklearn.cluster import KMeans km = KMeans(n_clusters=8, n_init=10,random_state=None) km.fit(X) km.predict(X) ## opcionalmente km.fit_predict(X)
n_clusters: Define el número de clusters a crear, por defecto 8.
n_init: Cuántas veces se ejecuta el algoritmo, por defecto 10.
random_state: Define la semilla aleatoria. Por defecto sin semilla.
init: Permite agregar centroides de manera manual.
.fit()
: Entrenará el modelo en los datos suministrados.
.predict()
Entregará las clusters asignados a cada dato suministrado.
.clusters_centers_
: Entregará las coordenadas de los centroides de cada Cluster.
.inertia_
: Entrega valores correspondiente a la within cluster distance
.
👀 Veamos un ejemplo en Colab.
Pre-procesamientos
Es importante recordar que K-Means es un Algoritmo basado en distancias
, por lo tanto se ve afectado por Outliers y por Escala.
Se recomienda preprocesar los datos con:
Winsorizer()
para eliminar Outliers.StandardScaler()
o MinMaxScaler()
para llevar a una escala común.Recordar, que el clustering no clasifica. Por lo tanto, a pesar de que K-Means nos indica a qué cluster pertenece cierto punto, debemos interpretar cada cluster para entender qué es lo que se agrupó
.
La interpretación del cluster es principalmente intuición y exploración, por lo tanto el EDA puede ser de utilidad para analizar clusters.
Se define como el
tratamiento
que podemos realizar al algoritmo luego de haber entregado ya sus predicciones.
Es posible generar más clusters de los necesarios y luego ir agrupando los más cercanos.
¿Cuál es el problema con este caso de Post-Procesamiento?
En Scikit-Learn
esto puede conseguirse utilizando el parámetro init. Se entregan los nuevos centroides para forzar
a K-Means que separe ciertos clusters.
Acá pueden encontrar una implementación de K-Modes en Python.