1. 程式人生 > >孤立森林(Isolation Forest)

孤立森林(Isolation Forest)

iForest (Isolation Forest)孤立森林 是一個基於Ensemble的快速異常檢測方法,具有線性時間複雜度和高精準度,是符合大資料處理要求的state-of-the-art演算法(詳見新版教材“Outlier Analysis”第5和第6章 PDF)。其可以用於網路安全中的攻擊檢測,金融交易欺詐檢測,疾病偵測,和噪聲資料過濾等。本文將通俗解釋實現方法和日常運用,即無需深厚的數學功底。

首先,我們先了解下該演算法的動機。目前學術界對異常(anomaly detection)的定義有很多種,iForest 適用與連續資料(Continuous numerical data)的異常檢測,將異常定義為“容易被孤立的離群點 (more likely to be separated)”——可以理解為分佈稀疏且離密度高的群體較遠的點。用統計學來解釋,在資料空間裡面,分佈稀疏的區域表示資料發生在此區域的概率很低,因而可以認為落在這些區域裡的資料是異常的。一個例子如下(來源):

iForest屬於Non-parametric和unsupervised的方法,即不用定義數學模型也不需要有標記的訓練。對於如何查詢哪些點是否容易被孤立(isolated),iForest使用了一套非常高效的策略。假設我們用一個隨機超平面來切割(split)資料空間(data space), 切一次可以生成兩個子空間(想象拿刀切蛋糕一分為二)。之後我們再繼續用一個隨機超平面來切割每個子空間,迴圈下去,直到每子空間裡面只有一個數據點為止。直觀上來講,我們可以發現那些密度很高的簇是可以被切很多次才會停止切割,但是那些密度很低的點很容易很早的就停到一個子空間了。上圖裡面黑色的點就很容易被切幾次就停到一個子空間,而白色點聚集的地方可以切很多次才停止。

怎麼來切這個資料空間是iForest的設計核心思想,本文僅介紹最基本的方法。由於切割是隨機的,所以需要用ensemble的方法來得到一個收斂值(蒙特卡洛方法),即反覆從頭開始切,然後平均每次切的結果。iForest 由t個iTree(Isolation Tree)孤立樹 組成,每個iTree是一個二叉樹結構,其實現步驟如下:

1. 從訓練資料中隨機選擇Ψ個點樣本點作為subsample,放入樹的根節點。

2. 隨機指定一個維度(attribute),在當前節點資料中隨機產生一個切割點p——切割點產生於當前節點資料中指定維度的最大值和最小值之間。

3. 以此切割點生成了一個超平面,然後將當前節點資料空間劃分為2個子空間:把指定維度裡小於p的資料放在當前節點的左孩子,把大於等於p的資料放在當前節點的右孩子。

4. 在孩子節點中遞迴步驟2和3,不斷構造新的孩子節點,直到 孩子節點中只有一個數據(無法再繼續切割) 或 孩子節點已到達限定高度 。

獲得t個iTree之後,iForest 訓練就結束,然後我們可以用生成的iForest來評估測試資料了。對於一個訓練資料x,我們令其遍歷每一棵iTree,然後計算x最終落在每個樹第幾層(x在樹的高度)。然後我們可以得出x在每棵樹的高度平均值,即 the average path length over t iTrees。*值得注意的是,如果x落在一個節點中含多個訓練資料,可以使用一個公式來修正x的高度計算,詳細公式推導見原論文。
獲得每個測試資料的average path length後,我們可以設定一個閾值(邊界值),average path length 低於此閾值的測試資料即為異常。也就是說 “iForest identifies anomalies as instances having the shortest average path lengths in a dataset ”(異常在這些樹中只有很短的平均高度). *值得注意的是,論文中對樹的高度做了歸一化,並得出一個0到1的數值,即越短的高度越接近1(異常的可能性越高)。

4個測試樣本遍歷一棵iTree的例子如下:

可以看到d最有可能是異常,因為其最早就被孤立(isolated)了。

個人見解:

1. iForest具有線性時間複雜度。因為是ensemble的方法,所以可以用在含有海量資料的資料集上面。通常樹的數量越多,演算法越穩定。由於每棵樹都是互相獨立生成的,因此可以部署在大規模分散式系統上來加速運算。

2. iForest不適用於特別高維的資料。由於每次切資料空間都是隨機選取一個維度,建完樹後仍然有大量的維度資訊沒有被使用,導致演算法可靠性降低。高維空間還可能存在大量噪音維度或無關維度(irrelevant attributes),影響樹的構建。對這類資料,建議使用子空間異常檢測(Subspace Anomaly Detection)技術。此外,切割平面預設是axis-parallel的,也可以隨機生成各種角度的切割平面,詳見“On Detecting Clustered Anomalies Using SCiForest”。

3. iForest僅對Global Anomaly 敏感,即全域性稀疏點敏感,不擅長處理區域性的相對稀疏點 (Local Anomaly)。目前已有改進方法發表於PAKDD,詳見“Improving iForest with Relative Mass”。

4. iForest推動了重心估計(Mass Estimation)理論發展,目前在分類聚類和異常檢測中都取得顯著效果,發表於各大頂級資料探勘會議和期刊(如SIGKDD,ICDM,ECML)。

參考文獻:

iForest 是劉飛博士(Fei Tony Liu)在莫納什大學就讀期間由陳開明(Kai-Ming Ting)教授和周志華(Zhi-Hua Zhou)教授指導發表的。第一個版本是在2008年ICDM上,獲得年度最佳論文,擴充版本發表與TKDD。

Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. "Isolation forest."Data Mining, 2008. ICDM'08. Eighth IEEE International Conference on. IEEE, 2008.

Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. "Isolation-based anomaly detection."ACM Transactions on Knowledge Discovery from Data (TKDD)6.1 (2012): 3.

論文下載:

http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf

http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tkdd11.pdf

原始碼下載:

R語言    https://sourceforge.net/projects/iforest/

Python語言    http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html

Java語言    http://weka.sourceforge.net/packageMetaData/isolationForest/index.html

Matlab語言 https://github.com/zhuyemvp/iForest

原文:https://blog.csdn.net/qq_39303465/article/details/79219415