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.