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()
Local Outlier Factor (LOF)

Gesamtlaufzeit des Skripts: (0 Minuten 0,064 Sekunden)

Verwandte Beispiele

Neuartigkeitserkennung mit Local Outlier Factor (LOF)

Neuartigkeitserkennung mit Local Outlier Factor (LOF)

Vergleich von Anomalieerkennungsalgorithmen zur Ausreißererkennung auf Toy-Datensätzen

Vergleich von Anomalieerkennungsalgorithmen zur Ausreißererkennung auf Toy-Datensätzen

Ausreißererkennung auf einem realen Datensatz

Ausreißererkennung auf einem realen Datensatz

Bewertung von Ausreißererkennungs-Schätzern

Bewertung von Ausreißererkennungs-Schätzern

Galerie generiert von Sphinx-Gallery