k-means, pero con dos suposiciones relajadas.
Los clusters ahora pueden ser elipses inclinadas, no círculos. Los puntos pueden pertenecer a más de uno a la vez.
Se ajusta con EM — el mismo ciclo de asignar suave y reajustar, ahora en 2-D y con una covarianza completa por componente.
Esas probabilidades son las responsabilidades. Son la forma en que ajusta y lo que te regresa.
300 puntos, tres blobs, con un shear que los vuelve elipses diagonales largas y traslapadas. Sin etiquetas. El caso canónico que k-means resuelve mal.
Paso E — responsabilidad del componente k sobre el punto i:
γik=∑jπjN(xi∣μj,Σj)πkN(xi∣μk,Σk)Paso M — reajustar cada componente, ponderando por responsabilidad. La covarianza es lo que inclina la elipse:
Σk=Nk1i=1∑Nγik(xi−μk)(xi−μk)⊤La log-verosimilitud solo sube. Cuando se aplana, paramos.
Dos contornos por componente (1σ, 2σ) sacados de la descomposición real en eigenvalores de la covarianza. Puntos sombreados por responsabilidad suave — mezclas en las costuras. Panel de abajo: la log-verosimilitud subiendo.
Semillas redondas → elipses diagonales en tres o cuatro cuadros. Converge en 23 iteraciones, log-verosimilitud de −1,081 → −515.
La log-verosimilitud siempre mejora con más componentes. El BIC penaliza el número de parámetros, así que sí tiene un mínimo real.
Mínimo en k=3. La pregunta del codo, pero con un objetivo real debajo.
Los mismos datos. k-means corta una línea recta a través de los grupos diagonales. El GMM envuelve cada uno en su elipse inclinada.
Índice de Rand ajustado contra los blobs verdaderos: k-means 0.60, GMM 1.0.
El EM hecho desde cero y sklearn.mixture.GaussianMixture(covariance_type="full")
llegan los dos a una log-verosimilitud promedio de −1.7162, y sus etiquetas
coinciden con ARI de 1.0.