機器學習_學習筆記系列(97):基於聚類區域性異常因子(Cluster-Based Local Outlier Factor)

--

上一回我們提到了非常著名的anomaly detection演算法LOF,今天我們要來介紹一個新的相關演算法「Cluster-Based Local Outlier Factor

Cluster-Based Local Outlier Factor

關於CBLOF,其最主要的想法是在LOF上在加上cluster的概念,所以我們在尋找異常因子的時候,我們會先將所有的資料進行聚類得到若干個clusters

而這裡的C裡面包含的cluster是按照cluster size由大到小排序。

接著我們設定兩個參數α和β來決定我們的每個cluster,屬於large cluster還是small cluster。

所以由上述兩組參數,我們可以決定出

Large Cluster

Small Cluster

接下來有了LC和SC之後我們就會進一步計算CBLOF

最後我們就可以根據CBLOF的大小來決定我們的outliers。

所以說我們可以從上面的式子看到,如果我們今天的點在large cluster裡面,我們CBLOF的大小決定於點到cluster中心點的距離,所以如果CBLOF越大代表他離cluster中心越遠,所以越有可能是outlier。若今天數據點在small cluster裡面,我們CBLOF的大小決定於點到其他large cluster的最近距離,意思就是說,我們今天把large cluster當作我們比較不可能為outlier點的集合,所以當我們離large cluster越遠的時候代表我們越有可是outlier

Example

接下來我們以手寫辨識來看效果

我們可以看到outlier的點幾乎都是在cluster和cluster的交接處,接下來我們把這些點原始圖片畫出來:

我們可以看到有些點是屬於人眼本身就很難分辨的圖像是7和5等等,但是我們也可以發現裡面出現的數字大部分都是6,但是6明明很好分辨,對於這方面其實有可能是因為6本身的資料比較少,所以被分到small cluster,但是實際上6可能在高維度空間離其他cluster都很遠,以至於6的每個CBLOF都很大,最後演算法才把他視為outlier。

Python Sample Code:

Github:

Reference:

[1] He, Z., Xu, X., & Deng, S. (2003). Discovering cluster-based local outliers. Pattern Recognition Letters, 24(9–10), 1641–1650.

--

--

劉智皓 (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