Hinweis
Zum Ende springen, um den vollständigen Beispielcode herunterzuladen oder dieses Beispiel über JupyterLite oder Binder in Ihrem Browser auszuführen.
Ausreißererfassung mit Local Outlier Factor (LOF)#
Der Local Outlier Factor (LOF) Algorithmus ist eine unüberwachte Methode zur Anomalieerkennung, die die lokale Dichtungsabweichung eines gegebenen Datenpunktes im Verhältnis zu seinen Nachbarn berechnet. Er betrachtet Samples mit einer deutlich geringeren Dichte als ihre Nachbarn als Ausreißer. Dieses Beispiel zeigt, wie LOF zur Ausreißererfassung verwendet wird, was der Standardanwendungsfall dieses Schätzers in scikit-learn ist. Beachten Sie, dass LOF bei der Ausreißererfassung keine Methoden predict, decision_function und score_samples hat. Details zum Unterschied zwischen Ausreißer- und Neuheitserkennung und zur Verwendung von LOF für die Neuheitserkennung finden Sie im Benutzerhandbuch.
Die Anzahl der berücksichtigten Nachbarn (Parameter n_neighbors) wird typischerweise so gesetzt, dass sie 1) größer ist als die minimale Anzahl von Samples, die ein Cluster enthalten muss, damit andere Samples lokale Ausreißer relativ zu diesem Cluster sein können, und 2) kleiner ist als die maximale Anzahl von nahen Samples, die potenziell lokale Ausreißer sein können. In der Praxis sind solche Informationen in der Regel nicht verfügbar, und die Einstellung von n_neighbors=20 scheint im Allgemeinen gut zu funktionieren.
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
Daten mit Ausreißern generieren#
import numpy as np
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]
n_outliers = len(X_outliers)
ground_truth = np.ones(len(X), dtype=int)
ground_truth[-n_outliers:] = -1
Modell für die Ausreißererfassung anpassen (Standard)#
Verwenden Sie fit_predict, um die vorhergesagten Labels der Trainingssamples zu berechnen (wenn LOF für die Ausreißererfassung verwendet wird, hat der Schätzer keine Methoden predict, decision_function und score_samples).
from sklearn.neighbors import LocalOutlierFactor
clf = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
y_pred = clf.fit_predict(X)
n_errors = (y_pred != ground_truth).sum()
X_scores = clf.negative_outlier_factor_
Ergebnisse plotten#
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerPathCollection
def update_legend_marker_size(handle, orig):
"Customize size of the legend marker"
handle.update_from(orig)
handle.set_sizes([20])
plt.scatter(X[:, 0], X[:, 1], color="k", s=3.0, label="Data points")
# plot circles with radius proportional to the outlier scores
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="Outlier scores",
)
plt.axis("tight")
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.xlabel("prediction errors: %d" % (n_errors))
plt.legend(
handler_map={scatter: HandlerPathCollection(update_func=update_legend_marker_size)}
)
plt.title("Local Outlier Factor (LOF)")
plt.show()

Gesamtlaufzeit des Skripts: (0 Minuten 0,064 Sekunden)
Verwandte Beispiele
Neuartigkeitserkennung mit Local Outlier Factor (LOF)
Vergleich von Anomalieerkennungsalgorithmen zur Ausreißererkennung auf Toy-Datensätzen