局部异常因子(LOF)异常检测方法

局部异常因子(LOF)是一种无监督异常检测方法,它通过计算给定数据点与其邻居的局部密度偏差来识别异常值。在这种方法中,那些与邻居相比密度显著较低的样本被视为异常值。本文将展示如何在scikit-learn库中使用LOF进行异常检测,这是该估计器的默认用例。需要注意的是,当LOF用于异常检测时,它没有predict、decision_function和score_samples方法。有关异常检测和新颖性检测之间的区别以及如何使用LOF进行新颖性检测的详细信息,请参阅用户指南。

通常考虑的邻居数量(n_neighbors参数)应设置为:1)大于一个聚类必须包含的最小样本数量,以便其他样本可以相对于这个聚类成为局部异常值;2)小于可能成为局部异常值的最近样本的最大数量。在实践中,这类信息通常不可用,而取n_neighbors=20通常效果不错。

生成带有异常值的数据

以下是一个使用Python和NumPy库生成带有异常值的数据集的示例。首先,生成一组符合正态分布的内围点,然后生成一组均匀分布的外围点作为异常值。

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

模型拟合与异常检测

使用LocalOutlierFactor类来拟合模型并计算训练样本的预测标签。当LOF用于异常检测时,估计器没有predict、decision_function和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_

使用matplotlib库绘制数据点和异常分数。异常分数较高的点将以较大的圆圈表示。

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()

本脚本的总运行时间为:0分钟0.079秒。

  • 使用局部异常因子(LOF)进行新颖性检测
  • 在玩具数据集上比较异常检测算法
  • 评估异常检测估计器
  • 在真实数据集上进行异常检测
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485