Detecção de Outliers com LOF

Beginner

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

Introdução

O algoritmo Local Outlier Factor (LOF) é um método de aprendizagem de máquina não supervisionado usado para detectar anomalias nos dados. Ele calcula o desvio de densidade local de um determinado ponto de dados em relação aos seus vizinhos e considera como outliers as amostras que têm uma densidade substancialmente menor do que a dos seus vizinhos.

Neste laboratório, usaremos o LOF para detectar outliers num conjunto de dados.

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

Vamos importar numpy e matplotlib para manipulação e visualização de dados, respetivamente. Também importamos LocalOutlierFactor de sklearn.neighbors para a deteção de outliers.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import LocalOutlierFactor

Gerar Dados com Outliers

Vamos gerar um conjunto de dados com 120 pontos de dados, 100 inliers e 20 outliers. Em seguida, vamos representar graficamente os dados para visualizar os outliers.

np.random.seed(42)

X_inliers = 0.3 * np.random.randn(100, 2)
X_inliers = np.r_[X_inliers + 2, X_inliers - 2]
X_outliers = np.random.uniform(low=-4, high=4, size=(20, 2))
X = np.r_[X_inliers, X_outliers]

plt.scatter(X[:, 0], X[:, 1], color="k", s=3.0)
plt.axis("tight")
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.xlabel("Pontos de dados")
plt.title("Dados com Outliers")
plt.show()

Ajustar o Modelo para Detecção de Outliers

Vamos usar LocalOutlierFactor para ajustar o modelo de detecção de outliers e calcular as etiquetas previstas das amostras de treino.

clf = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
y_pred = clf.fit_predict(X)
X_scores = clf.negative_outlier_factor_

Plotar Resultados

Vamos representar graficamente os pontos de dados com círculos cujo raio é proporcional às pontuações de outlier.

plt.scatter(X[:, 0], X[:, 1], color="k", s=3.0, label="Pontos de dados")
## plotar círculos com raio proporcional às pontuações de outlier
radius = (X_scores.max() - X_scores) / (X_scores.max() - X_scores.min())
scatter = plt.scatter(
    X[:, 0],
    X[:, 1],
    s=1000 * radius,
    edgecolors="r",
    facecolors="none",
    label="Pontuações de Outlier",
)
plt.axis("tight")
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.xlabel("Detecção de Outliers")
plt.legend(
    handler_map={scatter: HandlerPathCollection(update_func=update_legend_marker_size)}
)
plt.title("Fator Local de Outlier (LOF)")
plt.show()

Resumo

Neste laboratório, aprendemos a utilizar o Fator Local de Outliers (LOF) para a detecção de outliers. Gerámos um conjunto de dados com outliers, ajustámos o modelo para a detecção de outliers e representámos graficamente os resultados. O LOF é um poderoso método de aprendizagem de máquina não supervisionado que pode ser utilizado para detetar anomalias numa vasta gama de aplicações.