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.