Estimación de covarianza robusta en Python

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

En este laboratorio, aprenderá a usar la biblioteca scikit-learn en Python para estimar matrices de covarianza robustas. El tutorial le presentará el concepto de estimación de covarianza robusta y demostrará cómo se puede usar para estimar la matriz de covarianza de conjuntos de datos contaminados con valores atípicos.

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 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 sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


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-49272{{"Estimación de covarianza robusta en Python"}} ml/sklearn -.-> lab-49272{{"Estimación de covarianza robusta en Python"}} end

Importar bibliotecas

El primer paso es importar las bibliotecas necesarias. En este tutorial, usaremos NumPy, Matplotlib y scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.covariance import MinCovDet, EmpiricalCovariance

Generar datos

En este paso, generamos un conjunto de datos aleatorios con n_samples muestras y n_features características. También agregamos algunos valores atípicos al conjunto de datos.

n_samples = 80
n_features = 5

## Generar conjunto de datos aleatorio
rng = np.random.RandomState(42)
X = rng.randn(n_samples, n_features)

## Agregar valores atípicos al conjunto de datos
n_outliers = 20
outliers_index = rng.permutation(n_samples)[:n_outliers]
outliers_offset = 10.0 * (
    np.random.randint(2, size=(n_outliers, n_features)) - 0.5
)
X[outliers_index] += outliers_offset

Estimar la matriz de covarianza robusta

En este paso, estimamos una matriz de covarianza robusta del conjunto de datos utilizando el estimador de Determinante de Covarianza Mínimo (MCD).

## Estimate a robust covariance matrix of the dataset
mcd = MinCovDet().fit(X)
robust_cov = mcd.covariance_

Estimar la matriz de covarianza empírica

En este paso, estimamos una matriz de covarianza empírica del conjunto de datos utilizando el estimador de Estimación de Verosimilitud Máxima (MLE).

## Estimate an empirical covariance matrix of the dataset
emp_cov = EmpiricalCovariance().fit(X).covariance_

Comparar matrices de covarianza

En este paso, comparamos las matrices de covarianza robusta y empírica estimadas del conjunto de datos.

## Compare the estimated covariance matrices
print("Robust Covariance Matrix:")
print(robust_cov)
print("\nEmpirical Covariance Matrix:")
print(emp_cov)

Visualizar los resultados

En este paso, visualizamos los resultados de la estimación de la covarianza robusta y empírica.

## Visualize the results
fig, ax = plt.subplots()

## Plot the dataset
inliers_index = np.arange(n_samples)[~np.in1d(np.arange(n_samples), outliers_index)]
ax.scatter(
    X[inliers_index, 0], X[inliers_index, 1], color="black", label="Inliers"
)
ax.scatter(X[outliers_index, 0], X[outliers_index, 1], color="red", label="Outliers")

## Plot the estimated covariance matrices
for covariance, color, label in zip(
    [emp_cov, robust_cov], ["green", "magenta"], ["MLE", "MCD"]
):
    v, w = np.linalg.eigh(covariance)
    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(
        mcd.location_,
        v[0],
        v[1],
        180 + angle,
        color=color,
        label=label,
        alpha=0.2,
    )
    ell.set_clip_box(ax.bbox)
    ell.set_facecolor(color)
    ax.add_artist(ell)

## Set plot options
plt.legend()
plt.title("Robust Covariance Estimation")
plt.show()

Resumen

En este tutorial, has aprendido cómo utilizar la biblioteca scikit - learn en Python para estimar matrices de covarianza robustas. También has aprendido cómo utilizar el estimador de Determinante de Covarianza Mínimo (MCD) para estimar la matriz de covarianza de conjuntos de datos contaminados con valores atípicos.