Comparaison d'estimateurs de covariance

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

L'estimation de la covariance est une tâche importante en analyse statistique. Dans ce laboratoire, nous comparerons deux méthodes d'estimation de la covariance : Ledoit-Wolf et OAS. Nous utiliserons des données distribuées selon une loi normale pour comparer l'erreur quadratique moyenne estimée de ces deux méthodes.

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 Carnet de notes pour accéder au carnet Jupyter pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/covariance("Covariance Estimators") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/covariance -.-> lab-49206{{"Comparaison d'estimateurs de covariance"}} ml/sklearn -.-> lab-49206{{"Comparaison d'estimateurs de covariance"}} end

Importation des bibliothèques

Tout d'abord, nous devons importer les bibliothèques nécessaires pour ce laboratoire. Nous utiliserons numpy pour les calculs numériques, matplotlib pour les visualisations et scikit-learn pour l'estimation de la covariance.

import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import toeplitz, cholesky
from sklearn.covariance import LedoitWolf, OAS

Générer des données

Ensuite, nous allons générer des données distribuées selon une loi normale avec une matrice de covariance qui suit un processus AR(1). Nous utiliserons les fonctions toeplitz et cholesky de scipy.linalg pour générer la matrice de covariance.

np.random.seed(0)

n_features = 100
r = 0.1
real_cov = toeplitz(r ** np.arange(n_features))
coloring_matrix = cholesky(real_cov)

Calculer l'erreur quadratique moyenne (MSE) et le resserrement

Nous comparerons les méthodes Ledoit-Wolf et OAS en utilisant les données simulées. Nous calculerons l'erreur quadratique moyenne (MSE) et le resserrement des deux méthodes.

n_samples_range = np.arange(6, 31, 1)
repeat = 100
lw_mse = np.zeros((n_samples_range.size, repeat))
oa_mse = np.zeros((n_samples_range.size, repeat))
lw_shrinkage = np.zeros((n_samples_range.size, repeat))
oa_shrinkage = np.zeros((n_samples_range.size, repeat))

for i, n_samples in enumerate(n_samples_range):
    for j in range(repeat):
        X = np.dot(np.random.normal(size=(n_samples, n_features)), coloring_matrix.T)

        lw = LedoitWolf(store_precision=False, assume_centered=True)
        lw.fit(X)
        lw_mse[i, j] = lw.error_norm(real_cov, scaling=False)
        lw_shrinkage[i, j] = lw.shrinkage_

        oa = OAS(store_precision=False, assume_centered=True)
        oa.fit(X)
        oa_mse[i, j] = oa.error_norm(real_cov, scaling=False)
        oa_shrinkage[i, j] = oa.shrinkage_

Tracer les résultats

Enfin, nous allons tracer les résultats pour comparer l'erreur quadratique moyenne (MSE) et le resserrement des méthodes Ledoit-Wolf et OAS.

plt.subplot(2, 1, 1)
plt.errorbar(
    n_samples_range,
    lw_mse.mean(1),
    yerr=lw_mse.std(1),
    label="Ledoit-Wolf",
    color="navy",
    lw=2,
)
plt.errorbar(
    n_samples_range,
    oa_mse.mean(1),
    yerr=oa_mse.std(1),
    label="OAS",
    color="darkorange",
    lw=2,
)
plt.ylabel("Erreur carrée")
plt.legend(loc="upper right")
plt.title("Comparaison des estimateurs de covariance")
plt.xlim(5, 31)

plt.subplot(2, 1, 2)
plt.errorbar(
    n_samples_range,
    lw_shrinkage.mean(1),
    yerr=lw_shrinkage.std(1),
    label="Ledoit-Wolf",
    color="navy",
    lw=2,
)
plt.errorbar(
    n_samples_range,
    oa_shrinkage.mean(1),
    yerr=oa_shrinkage.std(1),
    label="OAS",
    color="darkorange",
    lw=2,
)
plt.xlabel("n_samples")
plt.ylabel("Resserrement")
plt.legend(loc="lower right")
plt.ylim(plt.ylim()[0], 1.0 + (plt.ylim()[1] - plt.ylim()[0]) / 10.0)
plt.xlim(5, 31)

plt.show()

Sommaire

Dans ce laboratoire, nous avons comparé les méthodes Ledoit-Wolf et OAS pour l'estimation de la covariance en utilisant des données distribuées selon une loi normale. Nous avons tracé l'erreur quadratique moyenne (MSE) et le resserrement des deux méthodes et avons constaté que la méthode OAS présente une meilleure convergence sous l'hypothèse que les données sont gaussiennes.