iForest (Isolation Forest)是由Liu et al. [1] 提出來的基於二叉樹的ensemble異常檢測算法,具備效果好、訓練快(線性複雜度)等特色。html
iForest爲聚類算法,不須要標記數據訓練。首先給出幾個定義:算法
iForest的基本思想很是簡單:完成異常點的isolation所需的劃分數大於正常樣本點(非異常)。以下圖所示:spa
\(x_i\)樣本點的isolation須要大概12次劃分,而異常點\(x_0\)指須要4次左右。所以,咱們能夠根據劃分次數來區分是否爲異常點。可是,如何建模呢?咱們容易想到:劃分對應於決策樹中節點分裂,那麼劃分次數即爲從決策樹的根節點到葉子節點所經歷的邊數,稱之爲路徑長度(path length)。假設樣本集合共有\(n\)個樣本點,對於二叉查找樹(Binary Search Tree, BST),則查找失敗的平均路徑長度爲
\[ c(n) = 2H(n-1) -(2(n-1)/n) \]
其中,\(H(i)\)爲harmonic number,可估計爲\(\ln (i) + 0.5772156649\)。那麼,可建模anomaly score:3d
\[ s(x,n) = 2^{-\frac{E(h(x))}{c(n)}} \]rest
其中,\(h(x)\)爲樣本點\(x\)的路徑長度,\(E(h(x))\)爲iForest的多棵樹中樣本點\(x\)的路徑長度的指望。特別地,htm
當\(s\)值越高(接近於1),則代表該點越可能爲異常點。若全部的樣本點的\(s\)值都在0.5左右,則說明該樣本集合沒有異常點。blog
iForest採用二叉決策樹來劃分樣本空間,每一次劃分都是隨機選取一個屬性值來作,具體流程以下:
ci
中止分裂條件:get
爲了不錯檢(swamping)與漏檢(masking),在訓練每棵樹的時候,爲了更好地區分,不會拿全量樣本,而會sub-sampling樣本集合。iForest的訓練流程以下:it
sklearn給出了iForest與其餘異常檢測算法的比較。
[1] Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. "Isolation forest." Data Mining, 2008. ICDM'08. Eighth IEEE International Conference on. IEEE, 2008.