機器學習_學習筆記系列(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).