Estimación de covarianza inversa espacial

Beginner

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

Introducción

Esta práctica demuestra cómo utilizar el estimador GraphicalLasso para aprender una matriz de covarianza y una precisión espacial a partir de un número reducido de muestras. El tutorial abarca la generación de datos, la estimación de la covarianza y la representación gráfica de los resultados.

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.

En ocasiones, 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 consultar a Labby. Deje su retroalimentación después de la sesión y lo resolveremos rápidamente para usted.

Generar los datos

El primer paso es generar los datos. En este caso, estamos generando un pequeño conjunto de datos de 60 muestras con 20 características. Utilizamos una matriz de covarianza inversa espacial para garantizar condiciones de recuperación favorables.

import numpy as np
from scipy import linalg
from sklearn.datasets import make_sparse_spd_matrix

n_samples = 60
n_features = 20

prng = np.random.RandomState(1)
prec = make_sparse_spd_matrix(
    n_features, alpha=0.98, smallest_coef=0.4, largest_coef=0.7, random_state=prng
)
cov = linalg.inv(prec)
d = np.sqrt(np.diag(cov))
cov /= d
cov /= d[:, np.newaxis]
prec *= d
prec *= d[:, np.newaxis]
X = prng.multivariate_normal(np.zeros(n_features), cov, size=n_samples)
X -= X.mean(axis=0)
X /= X.std(axis=0)

Estimar la covarianza

El segundo paso es estimar la covarianza. Utilizamos GraphicalLassoCV para aprender la matriz de precisión espacial. También comparamos los resultados con el estimador Ledoit-Wolf.

from sklearn.covariance import GraphicalLassoCV, ledoit_wolf

emp_cov = np.dot(X.T, X) / n_samples

model = GraphicalLassoCV()
model.fit(X)
cov_ = model.covariance_
prec_ = model.precision_

lw_cov_, _ = ledoit_wolf(X)
lw_prec_ = linalg.inv(lw_cov_)

Representar los resultados

El tercer paso es representar los resultados. Representamos las covarianzas y las precisiones. También representamos la métrica de selección de modelo.

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
plt.subplots_adjust(left=0.02, right=0.98)

## representar las covarianzas
covs = [
    ("Empírica", emp_cov),
    ("Ledoit-Wolf", lw_cov_),
    ("GraphicalLassoCV", cov_),
    ("Verdadera", cov),
]
vmax = cov_.max()
for i, (nombre, esta_cov) in enumerate(covs):
    plt.subplot(2, 4, i + 1)
    plt.imshow(
        esta_cov, interpolation="nearest", vmin=-vmax, vmax=vmax, cmap=plt.cm.RdBu_r
    )
    plt.xticks(())
    plt.yticks(())
    plt.title("%s covarianza" % nombre)


## representar las precisiones
precs = [
    ("Empírica", linalg.inv(emp_cov)),
    ("Ledoit-Wolf", lw_prec_),
    ("GraphicalLasso", prec_),
    ("Verdadera", prec),
]
vmax = 0.9 * prec_.max()
for i, (nombre, esta_prec) in enumerate(precs):
    ax = plt.subplot(2, 4, i + 5)
    plt.imshow(
        np.ma.masked_equal(esta_prec, 0),
        interpolation="nearest",
        vmin=-vmax,
        vmax=vmax,
        cmap=plt.cm.RdBu_r,
    )
    plt.xticks(())
    plt.yticks(())
    plt.title("%s precisión" % nombre)
    if hasattr(ax, "set_facecolor"):
        ax.set_facecolor(".7")
    else:
        ax.set_axis_bgcolor(".7")

## representar la métrica de selección de modelo
plt.figure(figsize=(4, 3))
plt.axes([0.2, 0.15, 0.75, 0.7])
plt.plot(model.cv_results_["alphas"], model.cv_results_["mean_test_score"], "o-")
plt.axvline(model.alpha_, color=".5")
plt.title("Selección de modelo")
plt.ylabel("Puntuación de validación cruzada")
plt.xlabel("alpha")

plt.show()

Resumen

Esta práctica demostró cómo utilizar el estimador GraphicalLasso para aprender una covarianza y una precisión espacial a partir de un número reducido de muestras. El tutorial abarcó la generación de datos, la estimación de la covarianza y la representación gráfica de los resultados.