??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~??
本博客的精華專欄:
【自動化測試】 【測試經驗】 【人工智能】 【Python】
Sklearn 機器學習異常值檢測:局部異常因子算法(LOF)
在實際的機器學習任務中,異常值檢測(Outlier Detection)是一個不可或缺的步驟。無論是用于信用卡欺詐識別、網絡入侵檢測,還是工業設備監控,發現“不合群”的數據點 都是理解系統異常的第一步。
今天,我們將深入介紹 Sklearn 中的 局部異常因子(Local Outlier Factor,簡稱 LOF) 算法,并通過豐富的示例與可視化,演示它在二維空間中識別局部異常的強大能力。
?? 一、什么是局部異常因子(LOF)?
核心思想解析
局部異常因子(LOF)是一種 基于密度 的異常值檢測算法,它不單純依賴樣本的距離或單維度統計,而是通過分析某個點與其鄰居之間的“局部密度差異”來判斷是否異常。
通俗來講,LOF 計算一個點的密度與鄰居點密度的比值。如果該點密度顯著低于鄰居(比值遠大于 1),則該點被視為“局部異常”。
與傳統方法的對比
方法 | 是否基于密度 | 是否考慮鄰域結構 | 是否支持多維數據 | 高維表現 |
---|---|---|---|---|
Z-score | ? 否 | ? 否 | ? 支持 | ? 效果差(逐維獨立分析) |
IQR | ? 否 | ? 否 | ? 支持 | ? 效果差(依賴中位數) |
LOF | ? 是 | ? 是 | ? 支持 | ? 結合降維更穩定 |
?? 二、Sklearn 中的 LOF 實現
Sklearn 提供了 sklearn.neighbors.LocalOutlierFactor
類來實現 LOF 檢測。支持無監督異常識別、也支持“半監督”形式(僅使用正常樣本進行模型訓練,用于預測未來新樣本是否異常)。
導入必要庫
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import LocalOutlierFactor
?? 三、構造示例數據并可視化
構造二維樣本
# 構造正常數據(聚集在 2,2 附近)
X_inliers = 0.3 * np.random.randn(100, 2) + [2, 2]# 構造離群數據(離群)
X_outliers = np.random