Covarianzas del Modelo Mixto de Gaussianas

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este tutorial demuestra el uso de diferentes tipos de covarianza para los modelos mixtos gaussianos (GMMs). Los GMMs se utilizan a menudo para agrupamiento, y podemos comparar los clusters obtenidos con las clases reales del conjunto de datos. Inicializamos las medias de las gaussianas con las medias de las clases del conjunto de entrenamiento para que esta comparación sea válida. Graficamos las etiquetas predichas en los datos de entrenamiento y de prueba utilizando una variedad de tipos de covarianza de GMM en el conjunto de datos iris. Comparamos GMMs con matrices de covarianza esférica, diagonal, completa y atada en orden creciente de rendimiento.

Aunque se esperaría que la covarianza completa tuviera el mejor rendimiento en general, es propensa a sobreajustarse en conjuntos de datos pequeños y no se generaliza bien a los datos de prueba.

En las gráficas, los datos de entrenamiento se muestran como puntos, mientras que los datos de prueba se muestran como cruces. El conjunto de datos iris es de cuatro dimensiones. Aquí se muestran solo las dos primeras dimensiones, y por lo tanto algunos puntos se separan en otras dimensiones.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/mixture("Gaussian Mixture Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/mixture -.-> lab-49134{{"Covarianzas del Modelo Mixto de Gaussianas"}} sklearn/model_selection -.-> lab-49134{{"Covarianzas del Modelo Mixto de Gaussianas"}} ml/sklearn -.-> lab-49134{{"Covarianzas del Modelo Mixto de Gaussianas"}} end

Importar bibliotecas

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
from sklearn.mixture import GaussianMixture
from sklearn.model_selection import StratifiedKFold

Cargar el conjunto de datos Iris

iris = datasets.load_iris()

Preparar datos de entrenamiento y prueba

skf = StratifiedKFold(n_splits=4)
train_index, test_index = next(iter(skf.split(iris.data, iris.target)))

X_train = iris.data[train_index]
y_train = iris.target[train_index]
X_test = iris.data[test_index]
y_test = iris.target[test_index]

Configurar estimadores GMM para diferentes tipos de covarianza

colors = ["navy", "turquoise", "darkorange"]
n_classes = len(np.unique(y_train))

estimators = {
    cov_type: GaussianMixture(
        n_components=n_classes, covariance_type=cov_type, max_iter=20, random_state=0
    )
    for cov_type in ["spherical", "diag", "tied", "full"]
}

n_estimators = len(estimators)

Definir una función para trazar elipses para GMMs

def make_ellipses(gmm, ax):
    for n, color in enumerate(colors):
        if gmm.covariance_type == "full":
            covariances = gmm.covariances_[n][:2, :2]
        elif gmm.covariance_type == "tied":
            covariances = gmm.covariances_[:2, :2]
        elif gmm.covariance_type == "diag":
            covariances = np.diag(gmm.covariances_[n][:2])
        elif gmm.covariance_type == "spherical":
            covariances = np.eye(gmm.means_.shape[1]) * gmm.covariances_[n]
        v, w = np.linalg.eigh(covariances)
        u = w[0] / np.linalg.norm(w[0])
        angle = np.arctan2(u[1], u[0])
        angle = 180 * angle / np.pi
        v = 2.0 * np.sqrt(2.0) * np.sqrt(v)
        ell = mpl.patches.Ellipse(
            gmm.means_[n, :2], v[0], v[1], angle=180 + angle, color=color
        )
        ell.set_clip_box(ax.bbox)
        ell.set_alpha(0.5)
        ax.add_artist(ell)
        ax.set_aspect("equal", "datalim")

Graficar GMMs para diferentes tipos de covarianza

plt.figure(figsize=(3 * n_estimators // 2, 6))
plt.subplots_adjust(
    bottom=0.01, top=0.95, hspace=0.15, wspace=0.05, left=0.01, right=0.99
)

for index, (name, estimator) in enumerate(estimators.items()):
    estimator.means_init = np.array(
        [X_train[y_train == i].mean(axis=0) for i in range(n_classes)]
    )

    estimator.fit(X_train)

    h = plt.subplot(2, n_estimators // 2, index + 1)
    make_ellipses(estimator, h)

    for n, color in enumerate(colors):
        data = iris.data[iris.target == n]
        plt.scatter(
            data[:, 0], data[:, 1], s=0.8, color=color, label=iris.target_names[n]
        )

    for n, color in enumerate(colors):
        data = X_test[y_test == n]
        plt.scatter(data[:, 0], data[:, 1], marker="x", color=color)

    y_train_pred = estimator.predict(X_train)
    train_accuracy = np.mean(y_train_pred.ravel() == y_train.ravel()) * 100
    plt.text(0.05, 0.9, "Train accuracy: %.1f" % train_accuracy, transform=h.transAxes)

    y_test_pred = estimator.predict(X_test)
    test_accuracy = np.mean(y_test_pred.ravel() == y_test.ravel()) * 100
    plt.text(0.05, 0.8, "Test accuracy: %.1f" % test_accuracy, transform=h.transAxes)

    plt.xticks(())
    plt.yticks(())
    plt.title(name)

plt.legend(scatterpoints=1, loc="lower right", prop=dict(size=12))
plt.show()

Resumen

Este tutorial demostró el uso de diferentes tipos de covarianza para los modelos mixtos de Gaussianas (GMMs) en Python. Usamos el conjunto de datos Iris como ejemplo y comparamos GMMs con matrices de covarianza esférica, diagonal, completa y atada en orden creciente de rendimiento. Graficamos las etiquetas predichas en los datos de entrenamiento y en los datos de prueba separados y mostramos que la covarianza completa tiende a sobreajustarse en conjuntos de datos pequeños y no se generaliza bien a los datos de prueba separados.