機器學習_學習筆記系列(96):區域性異常因子(Local Outlier Factor)

--

上一回我們介紹了Isolation Forest演算法,而這個章節我們繼續延續Anomaly Detection相關演算法的介紹,而今天我們要來講的是「Local Outlier Factor」。

Local Outlier Factor

關於LOC演算法,其是由Markus M. Breunig, Hans-Peter Kriegel, Raymond T. Ng, Jörg Sander所提出,論文名稱叫做

LOF: Identifying Density-Based Local Outliers

而提出這個演算法的團隊,和我們之前介紹的DBSCAN和OPTICS為同一個。

回歸正題,關於LOF演算法,其是基於空間密度來找出異常值,而這邊我們會定義一個東西

reachability distance:

這裡我們可以看到假使我們今天有兩個點A和B,k_distance(B),代表的就是B點到離B第k近的點的距離,distance(A,B)則就是A和B的距離。所以這裡的意思就是說,如果我們點和點之間相距夠近,我們就將他們一視同仁,視為密度較高的區域。

而接下來我們會計算

local reachability density:

其中N_k為A點的neighbor。所以這個式子代表的就是,我們A點neighbor其reachability distance平均的倒數,所以我們可以說,如果IRD很大,代表以A點為中心的區域很密集,反之則是很疏鬆。

而當我們求得了IRD之後,我們最後就會計算

Local Outlier Factor:

我們可以看到LOF,他做的事情就是計算A所有neighbor的IRD值並且將其平均除以IRD(A)。而LOF在意義上來說,如果接近1代表,A和其Neighbor的空間密度都非常接近,如果小於1非常多,代表A的密度大於他的neighbor,也就是密度較高的區域,若大於1非常多,則代表A的密度小於他的neighbor。

Example

接下來我們來看LOF在MNIST手寫辨識集的表現

我們可以看到顏色越深的地方就越有可能是我們的outliers,所以我將我們的threshold設為1.3看是哪些圖片會使我們的model難以辨別其數子是多少。

我們可以看到上面這些圖片,幾乎都是連人眼都很難判斷的數字,所以說我們可以用LOF演算法找到偏離正常資料非常多的異常值。

Python Sample Code:

Github:

Reference:

[1] Breunig, M. M., Kriegel, H. P., Ng, R. T., & Sander, J. (2000, May). LOF: identifying density-based local outliers. In Proceedings of the 2000 ACM SIGMOD international conference on Management of data (pp. 93–104).

--

--

劉智皓 (Chih-Hao Liu)
劉智皓 (Chih-Hao Liu)

Written by 劉智皓 (Chih-Hao Liu)

豬屎屋AI RD,熱愛AI研究、LLM/SD模型、RAG應用、CUDA/HIP加速運算、訓練推論加速,同時也是5G技術愛好者,研讀過3GPP/ETSI/O-RAN Spec和O-RAN/ONAP/OAI開源軟體。

No responses yet