使用局部離群因子 (LOF) 進行離群值檢測#

局部離群因子 (LOF) 演算法是一種非監督異常偵測方法,用於計算給定資料點相對於其鄰居的局部密度偏差。它將密度遠低於其鄰居的樣本視為離群值。此範例展示如何使用 LOF 進行離群值檢測,這是 scikit-learn 中此估計器的預設用例。請注意,當 LOF 用於離群值檢測時,它沒有 predictdecision_functionscore_samples 方法。有關離群值檢測和新穎性檢測之間差異以及如何使用 LOF 進行新穎性檢測的詳細資訊,請參閱使用者指南

考量的鄰居數量(參數 n_neighbors)通常設定為 1) 大於叢集必須包含的最小樣本數量,以便其他樣本可以是相對於此叢集的局部離群值,以及 2) 小於可能為局部離群值的附近樣本的最大數量。實際上,通常無法取得此類資訊,且採用 n_neighbors=20 似乎在一般情況下效果良好。

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

產生具有離群值的資料#

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

擬合離群值檢測模型(預設)#

使用 fit_predict 計算訓練樣本的預測標籤(當 LOF 用於離群值檢測時,估計器沒有 predictdecision_functionscore_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_

繪製結果#

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)

腳本的總執行時間:(0 分鐘 0.083 秒)

相關範例

使用局部離群因子 (LOF) 進行新穎性檢測

使用局部離群因子 (LOF) 進行新穎性檢測

在玩具資料集上比較用於離群值偵測的異常偵測演算法

在玩具資料集上比較用於離群值偵測的異常偵測演算法

離群值偵測估算器的評估

離群值偵測估算器的評估

真實資料集上的離群值偵測

真實資料集上的離群值偵測

由 Sphinx-Gallery 產生圖庫