Implementación EM
Aquí tienes una implementación del algoritmo EM (Expectation-Maximization) usando el modelo GaussianMixture
de la librería sklearn.mixture
en Python aplicado al dataset Iris.
El algoritmo EM busca asignar probabilidades a cada punto de pertenecer a diferentes componentes Gaussianas (clusters), utilizando iterativamente pasos de Expectación y Maximización para optimizar la asignación.
Implementación en Python
from sklearn.mixture import GaussianMixture
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# Cargar el dataset Iris
iris = load_iris()
X = iris.data
y = iris.target
# Crear el modelo de mezcla Gaussiana con 3 componentes (clusters)
em_model = GaussianMixture(n_components=3, random_state=42)
em_model.fit(X)
# Predecir las etiquetas
y_pred = em_model.predict(X)
# Convertir datos a DataFrame para visualización
df = pd.DataFrame(X, columns=iris.feature_names)
df['Cluster'] = y_pred
# Visualizar los resultados en dos dimensiones
plt.figure(figsize=(10, 6))
sns.scatterplot(x='sepal length (cm)', y='sepal width (cm)', hue='Cluster', palette='viridis', data=df, style=y)
plt.title('Clustering EM - Dataset Iris')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.show()
Explicación de las Opciones Clave
n_components
: Número de clusters (componentes Gaussianas) que queremos encontrar. Aquí se usa3
dado que el dataset Iris tiene tres especies.random_state
: Fija la semilla para reproducibilidad.
Interpretación de Resultados
- El modelo
GaussianMixture
intenta ajustar tres distribuciones Gaussianas a los datos del Iris, capturando la estructura subyacente. - La visualización muestra los clusters encontrados por el modelo y permite observar qué tan bien se ajustan estos a las especies originales del dataset.
Opciones Principales de GaussianMixture
n_components
(int, default=1):
Número de componentes Gaussianas en el modelo. Cada componente representa una distribución Gaussiana (cluster) que el modelo intentará ajustar a los datos.em_model = GaussianMixture(n_components=3)
covariance_type
(str, default=’full’):
Especifica el tipo de matriz de covarianza para las componentes Gaussianas. Las opciones son:'full'
: Cada componente tiene su propia matriz de covarianza completa.'tied'
: Las componentes comparten la misma matriz de covarianza.'diag'
: Cada componente tiene una matriz de covarianza diagonal (independencia entre características).'spherical'
: Cada componente tiene una matriz de covarianza esférica (varianza igual en todas las direcciones).
em_model = GaussianMixture(covariance_type='diag')
tol
(float, default=1e-3):
Define la tolerancia para la convergencia del algoritmo EM. El modelo parará cuando la mejora de la log-verosimilitud esté por debajo de este valor entre iteraciones.em_model = GaussianMixture(tol=0.001)
max_iter
(int, default=100):
Número máximo de iteraciones del algoritmo EM. Puede aumentarse si el modelo no converge en las iteraciones predefinidas.em_model = GaussianMixture(max_iter=200)
n_init
(int, default=1):
Número de inicializaciones para elegir el mejor modelo. El modelo calculan_init
modelos y selecciona el mejor en función de la log-verosimilitud.em_model = GaussianMixture(n_init=10)
init_params
(str, default=’kmeans’):
Método para inicializar los parámetros. Las opciones son:'kmeans'
: Utiliza el algoritmo K-means para la inicialización.'random'
: Asigna aleatoriamente puntos a componentes Gaussianas.
em_model = GaussianMixture(init_params='random')
weights_init
,means_init
,precisions_init
(array-like, opcionales):
Permiten definir manualmente las ponderaciones, medias, y matrices de precisión iniciales, útil para casos avanzados con inicialización personalizada.warm_start
(bool, default=False):
Si está enTrue
, permite entrenar el modelo sucesivamente sin volver a empezar desde cero en cada ajuste, utilizando el último estado de los parámetros.verbose
(int, default=0):
Controla la salida de texto del proceso de ajuste. Niveles más altos dan más detalles.em_model = GaussianMixture(verbose=1)
random_state
(int, default=None):
Establece la semilla para la generación de números aleatorios, útil para reproducibilidad.em_model = GaussianMixture(random_state=42)
Ejemplo Completo con Opciones Ajustadas
Aquí tienes un ejemplo de cómo aplicar GaussianMixture
con varias opciones personalizadas:
from sklearn.mixture import GaussianMixture
from sklearn.datasets import load_iris
import numpy as np
# Cargar datos
X, y = load_iris(return_X_y=True)
# Crear el modelo de mezcla Gaussiana
em_model = GaussianMixture(
n_components=3, # Número de clusters
covariance_type='diag', # Covarianza diagonal
tol=0.001, # Tolerancia para convergencia
max_iter=200, # Iteraciones máximas
n_init=5, # Inicializaciones
init_params='kmeans', # Inicialización K-means
random_state=42 # Semilla para reproducibilidad
)
# Ajustar el modelo a los datos
em_model.fit(X)
labels = em_model.predict(X)
print("Labels asignados:", labels)
print("Log-verosimilitud:", em_model.lower_bound_)