孤立森林-iForest(Isolation Forest)-異常點檢測

目的:對於無label數據,尋找異常數據html

孤立森林算法思想:算法

1)用一個隨機超平面來切割(split)數據空間(data space), 切一次能夠生成兩個子空間(想象拿刀切蛋糕一分爲二)
2)再繼續用一個隨機超平面來切割每一個子空間,循環下去,直到每子空間裏面只有一個數據點爲止,直觀上來說,咱們能夠發現那些密度很高的簇是能夠被切不少次纔會中止切割,可是那些密度很低的點很容易很早的就停到一個子空間了
 
算法實現步驟:
iForest 由t個iTree(Isolation Tree)孤立樹 組成,每一個iTree是一個二叉樹結構
1)從訓練數據中隨機選擇Ψ個點樣本點做爲subsample,放入樹的根節點
2)隨機指定一個維度(attribute),在當前節點數據中隨機產生一個切割點p——切割點產生於當前節點數據中指定維度的最大值和最小值之間
3)以此切割點生成了一個超平面,而後將當前節點數據空間劃分爲2個子空間:把指定維度裏小於p的數據放在當前節點的左孩子,把大於等於p的數據放在當前節點的右孩子
4)在孩子節點中遞歸步驟2和3,不斷構造新的孩子節點,直到 孩子節點中只有一個數據(沒法再繼續切割)或 孩子節點已到達限定高度 
 
評估測試數據:
對於一個訓練數據x,咱們令其遍歷每一棵iTree,而後計算x最終落在每一個樹第幾層(x在樹的高度)。而後咱們能夠得出x在每棵樹的高度平均值,設置一個閾值(邊界值),低於此閾值的測試數據即爲異常, 異常在這些樹中只有很短的平均高度
 
例子遍歷一棵樹:

能夠看到d最有多是異常,由於其最先就被孤立(isolated)了測試

iForest算法默認參數設置以下:spa

subsample size: 256rest

Tree height: 8htm

Number of trees: 100blog

通俗解釋就是——建100棵iTree,每棵iTree最高8層,且每棵iTree都是獨立隨機選擇256個數據樣本建成遞歸

 

算法優缺點:ci

1)一般樹的數量越多,算法越穩定get

2)iForest不適用於特別高維的數據,因爲每次切數據空間都是隨機選取一個維度,建完樹後仍然有大量的維度信息沒有被使用,致使算法可靠性下降

 

論文下載:

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

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

 

調包:

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

 

轉載本博筆記須在文章明顯處註明原文的連接和做者信息

 

參考資料:

https://www.jianshu.com/p/5af3c66e0410?utm_campaign=maleskine

相關文章
相關標籤/搜索