Detecção de Valores Discrepantes em Dados de Vinho

Beginner

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

Introdução

Neste laboratório, iremos realizar a deteção de valores discrepantes num conjunto de dados real utilizando o scikit-learn. A deteção de valores discrepantes é o processo de identificar pontos de dados que diferem significativamente da maioria dos dados. Os valores discrepantes podem ser causados por erros de medição, corrupção de dados ou simplesmente representar um evento raro. A deteção de valores discrepantes é importante em muitas aplicações, como deteção de fraude, deteção de intrusões em redes e diagnóstico médico.

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 a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. 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 e carregar o conjunto de dados

Começaremos importando as bibliotecas necessárias e carregando o conjunto de dados Wine do scikit-learn. O conjunto de dados Wine contém informações sobre diferentes tipos de vinho, incluindo suas propriedades químicas.

import numpy as np
from sklearn.covariance import EllipticEnvelope
from sklearn.svm import OneClassSVM
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine

## Carregar o conjunto de dados
X1 = load_wine()["data"][:, [1, 2]]  ## dois clusters
X2 = load_wine()["data"][:, [6, 9]]  ## em forma de "banana"

Definir classificadores e cores

Vamos definir os classificadores de deteção de valores discrepantes que usaremos neste laboratório. Também definiremos as cores que serão usadas para representar os resultados.

## Definir "classificadores" a serem usados
classifiers = {
    "Covariância Empírica": EllipticEnvelope(support_fraction=1.0, contamination=0.25),
    "Covariância Robusta (Determinante de Covariância Mínima)": EllipticEnvelope(
        contamination=0.25
    ),
    "OCSVM": OneClassSVM(nu=0.25, gamma=0.35),
}
colors = ["m", "g", "b"]

Detecção de Valores Discrepantes em Dados Bidimensionais

Vamos realizar a detecção de valores discrepantes no conjunto de dados Wine bidimensional. Usaremos três classificadores diferentes para detectar valores discrepantes: Covariância Empírica, Covariância Robusta e One-Class SVM. Em seguida, plotaremos os resultados.

## Treinar uma fronteira para detecção de valores discrepantes com vários classificadores
xx1, yy1 = np.meshgrid(np.linspace(0, 6, 500), np.linspace(1, 4.5, 500))
for i, (clf_name, clf) in enumerate(classifiers.items()):
    plt.figure(1)
    clf.fit(X1)
    Z1 = clf.decision_function(np.c_[xx1.ravel(), yy1.ravel()])
    Z1 = Z1.reshape(xx1.shape)
    plt.contour(
        xx1, yy1, Z1, levels=[0], linewidths=2, colors=colors[i]
    )

## Plotar os resultados (= forma da nuvem de pontos de dados)
plt.figure(1)  ## dois clusters
plt.title("Detecção de valores discrepantes em um conjunto de dados real (reconhecimento de vinho)")
plt.scatter(X1[:, 0], X1[:, 1], color="black")
plt.xlim((xx1.min(), xx1.max()))
plt.ylim((yy1.min(), yy1.max()))
plt.ylabel("cinzas")
plt.xlabel("ácido málico")
plt.show()

Detecção de Valores Discrepantes em Dados Complexos

Vamos realizar a detecção de valores discrepantes no conjunto de dados "em forma de banana" Wine. Usaremos os mesmos três classificadores anteriores e plotaremos os resultados.

## Treinar uma fronteira para detecção de valores discrepantes com vários classificadores
xx2, yy2 = np.meshgrid(np.linspace(-1, 5.5, 500), np.linspace(-2.5, 19, 500))
for i, (clf_name, clf) in enumerate(classifiers.items()):
    plt.figure(2)
    clf.fit(X2)
    Z2 = clf.decision_function(np.c_[xx2.ravel(), yy2.ravel()])
    Z2 = Z2.reshape(xx2.shape)
    plt.contour(
        xx2, yy2, Z2, levels=[0], linewidths=2, colors=colors[i]
    )

## Plotar os resultados (= forma da nuvem de pontos de dados)
plt.figure(2)  ## forma "banana"
plt.title("Detecção de valores discrepantes em um conjunto de dados real (reconhecimento de vinho)")
plt.scatter(X2[:, 0], X2[:, 1], color="black")
plt.xlim((xx2.min(), xx2.max()))
plt.ylim((yy2.min(), yy2.max()))
plt.ylabel("intensidade_cor")
plt.xlabel("flavanoides")
plt.show()

Resumo

Neste laboratório, realizamos a detecção de valores discrepantes em conjuntos de dados Wine bidimensionais utilizando a biblioteca scikit-learn. Empregamos três classificadores diferentes para detectar valores discrepantes: Covariância Empírica, Covariância Robusta e One-Class SVM. Em seguida, plotamos os resultados para visualizar os dados e os valores discrepantes detectados. A detecção de valores discrepantes é uma tarefa importante na análise de dados, e a scikit-learn fornece diversas ferramentas para realizar esta tarefa de forma eficiente.