Introduction
Ce laboratoire montre comment utiliser l'estimateur GraphicalLasso pour apprendre une covariance et une précision sparse à partir d'un nombre limité d'échantillons. Le tutoriel couvre la génération de données, l'estimation de la covariance et la tracé des résultats.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limites de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Générer les données
La première étape consiste à générer les données. Dans ce cas, nous générons un petit ensemble de données de 60 échantillons avec 20 caractéristiques. Nous utilisons une matrice de covariance inverse sparse pour garantir des conditions de récupération 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)
Estimer la covariance
La deuxième étape consiste à estimer la covariance. Nous utilisons GraphicalLassoCV pour apprendre la matrice de précision sparse. Nous comparons également les résultats avec l'estimateur 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_)
Tracer les résultats
La troisième étape consiste à tracer les résultats. Nous traçons les covariances et les précisions. Nous traçons également la métrique de sélection de modèle.
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.subplots_adjust(left=0.02, right=0.98)
## tracer les covariances
covs = [
("Empirique", emp_cov),
("Ledoit-Wolf", lw_cov_),
("GraphicalLassoCV", cov_),
("Vraie", cov),
]
vmax = cov_.max()
for i, (nom, cette_cov) in enumerate(covs):
plt.subplot(2, 4, i + 1)
plt.imshow(
cette_cov, interpolation="proche", vmin=-vmax, vmax=vmax, cmap=plt.cm.RdBu_r
)
plt.xticks(())
plt.yticks(())
plt.title("%s covariance" % nom)
## tracer les précisions
precs = [
("Empirique", linalg.inv(emp_cov)),
("Ledoit-Wolf", lw_prec_),
("GraphicalLasso", prec_),
("Vraie", prec),
]
vmax = 0.9 * prec_.max()
for i, (nom, cette_prec) in enumerate(precs):
ax = plt.subplot(2, 4, i + 5)
plt.imshow(
np.ma.masked_equal(cette_prec, 0),
interpolation="proche",
vmin=-vmax,
vmax=vmax,
cmap=plt.cm.RdBu_r,
)
plt.xticks(())
plt.yticks(())
plt.title("%s précision" % nom)
if hasattr(ax, "set_facecolor"):
ax.set_facecolor(".7")
else:
ax.set_axis_bgcolor(".7")
## tracer la métrique de sélection de modèle
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("Sélection de modèle")
plt.ylabel("Score de validation croisée")
plt.xlabel("alpha")
plt.show()
Sommaire
Ce laboratoire a démontré comment utiliser l'estimateur GraphicalLasso pour apprendre une covariance et une précision sparse à partir d'un nombre limité d'échantillons. Le tutoriel a couvert la génération de données, l'estimation de la covariance et le tracé des résultats.