Estimação Robusta de Covariância em Python

Beginner

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

Introdução

Neste laboratório, aprenderá a utilizar a biblioteca scikit-learn em Python para estimar matrizes de covariância robustas. O tutorial apresentará o conceito de estimação robusta de covariância e demonstrará como pode ser utilizada para estimar a matriz de covariância de conjuntos de dados contaminados por valores discrepantes.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para praticar.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar o carregamento. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Importar Bibliotecas

O primeiro passo é importar as bibliotecas necessárias. Neste tutorial, usaremos NumPy, Matplotlib e scikit-learn.

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

Gerar Dados

Neste passo, geramos um conjunto de dados aleatório com n_samples amostras e n_features características. Também adicionamos alguns valores discrepantes ao conjunto de dados.

n_samples = 80
n_features = 5

## Gerar conjunto de dados aleatório
rng = np.random.RandomState(42)
X = rng.randn(n_samples, n_features)

## Adicionar valores discrepantes ao conjunto de dados
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 Matriz de Covariância Robusta

Neste passo, estimamos uma matriz de covariância robusta do conjunto de dados utilizando o estimador Minimum Covariance Determinant (MCD).

## Estimar uma matriz de covariância robusta do conjunto de dados
mcd = MinCovDet().fit(X)
robust_cov = mcd.covariance_

Estimar Matriz de Covariância Empírica

Neste passo, estimamos uma matriz de covariância empírica do conjunto de dados utilizando o estimador de Máxima Verossimilhança (MLE).

## Estimar uma matriz de covariância empírica do conjunto de dados
emp_cov = EmpiricalCovariance().fit(X).covariance_

Comparar Matrizes de Covariância

Neste passo, comparamos as matrizes de covariância robusta e empírica estimadas do conjunto de dados.

## Comparar as matrizes de covariância estimadas
print("Matriz de Covariância Robusta:")
print(robust_cov)
print("\nMatriz de Covariância Empírica:")
print(emp_cov)

Visualizar Resultados

Neste passo, visualizamos os resultados da estimação robusta e empírica da matriz de covariância.

## Visualizar os resultados
fig, ax = plt.subplots()

## Plotar o conjunto de dados
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")

## Plotar as matrizes de covariância estimadas
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)

## Definir opções do gráfico
plt.legend()
plt.title("Estimação Robusta da Matriz de Covariância")
plt.show()

Resumo

Neste tutorial, aprendeu a utilizar a biblioteca scikit-learn em Python para estimar matrizes de covariância robustas. Também aprendeu a utilizar o estimador Minimum Covariance Determinant (MCD) para estimar a matriz de covariância de conjuntos de dados contaminados por valores discrepantes.