算法原理
iForest (Isolation Forest)孤立森林 是一個(gè)基于Ensemble的快速異常檢測(cè)方法花履,具有線性時(shí)間復(fù)雜度和高精準(zhǔn)度,是符合大數(shù)據(jù)處理要求的state-of-the-art算法颅停。其可以用于網(wǎng)絡(luò)安全中的攻擊檢測(cè),金融交易欺詐檢測(cè)上炎,疾病偵測(cè),和噪聲數(shù)據(jù)過濾等。
作為傳統(tǒng)SPC異常檢測(cè)中的一個(gè)非常不錯(cuò)的補(bǔ)充展姐,特別是針對(duì)有子組的情況下異常檢測(cè)更靈敏蜕该。
iForest 適用與連續(xù)數(shù)據(jù)(Continuous numerical data)的異常檢測(cè)犁柜,將異常定義為“容易被孤立的離群點(diǎn) (more likely to be separated)”——可以理解為分布稀疏且離密度高的群體較遠(yuǎn)的點(diǎn)。用統(tǒng)計(jì)學(xué)來解釋堂淡,在數(shù)據(jù)空間里面馋缅,分布稀疏的區(qū)域表示數(shù)據(jù)發(fā)生在此區(qū)域的概率很低,因而可以認(rèn)為落在這些區(qū)域里的數(shù)據(jù)是異常的绢淀。
黑色的點(diǎn)為異常點(diǎn)萤悴,白色點(diǎn)為正常的點(diǎn)(在一個(gè)簇中)。iForest檢測(cè)到的異常邊界為紅色皆的,它可以正確地檢測(cè)到所有黑點(diǎn)異常點(diǎn)稚疹。
算法步驟
用ensemble的方法來得到一個(gè)收斂值(蒙特卡洛方法),即反復(fù)從頭開始切祭务,然后平均每次切的結(jié)果内狗。iForest 由t個(gè)iTree(Isolation Tree)孤立樹 組成,每個(gè)iTree是一個(gè)二叉樹結(jié)構(gòu)义锥,其實(shí)現(xiàn)步驟如下:
- 從訓(xùn)練數(shù)據(jù)中隨機(jī)選擇Ψ個(gè)點(diǎn)樣本點(diǎn)作為subsample柳沙,放入樹的根節(jié)點(diǎn)。
- 機(jī)指定一個(gè)維度(attribute)拌倍,在當(dāng)前節(jié)點(diǎn)數(shù)據(jù)中隨機(jī)產(chǎn)生一個(gè)切割點(diǎn)p——切割點(diǎn)產(chǎn)生于當(dāng)前節(jié)點(diǎn)數(shù)據(jù)中指定維度的最大值和最小值之間赂鲤。
- 3以此切割點(diǎn)生成了一個(gè)超平面,然后將當(dāng)前節(jié)點(diǎn)數(shù)據(jù)空間劃分為2個(gè)子空間:把指定維度里小于p的數(shù)據(jù)放在當(dāng)前節(jié)點(diǎn)的左孩子柱恤,把大于等于p的數(shù)據(jù)放在當(dāng)前節(jié)點(diǎn)的右孩子数初。
- 4在孩子節(jié)點(diǎn)中遞歸步驟2和3,不斷構(gòu)造新的孩子節(jié)點(diǎn)梗顺,直到 孩子節(jié)點(diǎn)中只有一個(gè)數(shù)據(jù)(無法再繼續(xù)切割) 或 孩子節(jié)點(diǎn)已到達(dá)限定高度 泡孩。
孤立森林Python實(shí)現(xiàn)算法如下:
1、導(dǎo)入模塊和算法擬合
<pre style="box-sizing: border-box; margin: 0px 0px 1rem; padding: 0px; border: none; outline: none; -webkit-tap-highlight-color: transparent; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 14px; overflow: auto; display: block; color: rgb(33, 37, 41); -webkit-font-smoothing: antialiased; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"> `from sklearn.ensemble import IsolationForest
import pandas as pd
y=[470,509,500,511,435,489,483,483,482,483,504,472,464,481,501,581,507,558,569,467,382,464,482,474,482,478,477,536,485,502,489,507,432,507,470,482,485,482,505,470,487,476]
y = pd.DataFrame(y)
fit the model
clf = IsolationForest(contamination=0.05)
clf.fit(y)`
</pre>
上面算法中的參數(shù)contamination=0.05表示占總數(shù)的5%為異常
1寺谤、導(dǎo)入模塊和算法擬合
<pre style="box-sizing: border-box; margin: 0px 0px 1rem; padding: 0px; border: none; outline: none; -webkit-tap-highlight-color: transparent; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 14px; overflow: auto; display: block; color: rgb(33, 37, 41); -webkit-font-smoothing: antialiased; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"> `y['fcst'] = clf.predict(y)
label0 = y[y.fcst==1]['fcst'].count()
label1 = y[y.fcst==-1]['fcst'].count()
if label0>label1:#正常的多
y.loc[y['fcst'] == 1, 'isAbnormal'] = 0
y.loc[y['fcst'] == -1, 'isAbnormal'] = 1
else:
y.loc[y['fcst'] == 1, 'isAbnormal'] = 1
y.loc[y['fcst'] == -1, 'isAbnormal'] = 0
y.columns = ['data','fcst','isAbnormal']
y['isAbnormal']=y['isAbnormal'].astype(int)
y = y[['data','isAbnormal']]`
</pre>
字段fcst記錄了預(yù)測(cè)的分類結(jié)果仑鸥,有兩個(gè)分類-1和1,-1的是異常值变屁,為了我們的結(jié)果的通用是眼俊,0表示正常,1表示異常粟关,上面的代碼進(jìn)行轉(zhuǎn)換疮胖,默認(rèn)多的分類是正常,少的分類是異常。
結(jié)果如下:
至此澎灸,我們已經(jīng)完成了一種機(jī)器學(xué)習(xí)(孤立森林算法)的異常檢測(cè)院塞。
SPC系統(tǒng)實(shí)現(xiàn):
接下來看看我們?cè)赟PC系統(tǒng)上的實(shí)現(xiàn)。
我們把孤立森林算法得到的異常點(diǎn)击孩,直接顯示在SPC控制圖上迫悠,請(qǐng)看下圖。也可以選擇不顯示巩梢。
這樣我們就可以在SPC控制圖上顯示其他異常判定算法的異常判定結(jié)果了〈葱梗現(xiàn)在知道機(jī)器學(xué)習(xí)怎么和SPC結(jié)合在一起如何使用了吧。
如果你想了解上面的功能的測(cè)試括蝠,
下方鏈接可以在線體驗(yàn)和上圖完成一樣的功能鞠抑。