孤立森林(Isolation Forest)


首先隨機(jī)選擇到的維度是 “年齡”盯蝴,然后隨機(jī)選擇一個(gè)切割點(diǎn) 18碘耳,小于 18 歲的只有莫小貝一個(gè)人,所以她最先被 “孤立” 出來(lái)了僻澎;第二個(gè)隨機(jī)選擇的特征是 ”體重“,只有大嘴高于 80 公斤十饥,所以也被 ”孤立“ 了窟勃;第三個(gè)選擇 ”文化程度“ 這個(gè)特征,由于只有秀才的文化程度為高逗堵,于是被 ”孤立“ 出來(lái)了 ……

假設(shè)我們?cè)O(shè)定樹(shù)的高度為 3秉氧,那么這棵樹(shù)的訓(xùn)練就結(jié)束了。在這棵樹(shù)上蜒秤,莫小貝的路徑長(zhǎng)度為 1汁咏,大嘴為 2,秀才為 3作媚,單看這一棵樹(shù)攘滩,莫小貝的異常程度最高。但很顯然纸泡,她之所以最先被孤立出來(lái)漂问,與特征被隨機(jī)選擇到的順序有關(guān),所以我們通過(guò)對(duì)多棵樹(shù)進(jìn)行訓(xùn)練女揭,來(lái)去除這種隨機(jī)性蚤假,讓結(jié)果盡量收斂。

1.原理

使用孤立森林的前提是吧兔,將異常點(diǎn)定義為那些 “容易被孤立的離群點(diǎn)——孤立森林算法的理論基礎(chǔ)有兩點(diǎn):

  • 異常數(shù)據(jù)占總樣本量的比例很辛籽觥;
  • 異常點(diǎn)的特征值與正常點(diǎn)的差異很大境蔼。

1.1算法思想

想象-我們用一個(gè)隨機(jī)超平面對(duì)一個(gè)數(shù)據(jù)空間進(jìn)行切割灶平,切一次可以生成兩個(gè)子空間-伺通。接下來(lái),我們?cè)倮^續(xù)隨機(jī)選取超平面民逼,來(lái)切割第一步得到的兩個(gè)子空間泵殴,以此循環(huán)下去,直到每子空間里面只包含一個(gè)數(shù)據(jù)點(diǎn)為止拼苍。直觀上來(lái)看笑诅,我們可以發(fā)現(xiàn),那些密度很高的簇要被切很多次才會(huì)停止切割疮鲫,即每個(gè)點(diǎn)都單獨(dú)存在于一個(gè)子空間內(nèi)吆你,但那些分布稀疏的點(diǎn),大都很早就停到一個(gè)子空間內(nèi)了

孤立森林算法總共分兩步:

訓(xùn)練 iForest:從訓(xùn)練集中進(jìn)行采樣俊犯,構(gòu)建孤立樹(shù)妇多,對(duì)森林中的每棵孤立樹(shù)進(jìn)行測(cè)試,記錄路徑長(zhǎng)度燕侠;

計(jì)算異常分?jǐn)?shù):根據(jù)異常分?jǐn)?shù)計(jì)算公式者祖,計(jì)算每個(gè)樣本點(diǎn)的 anomaly score。

1.2單棵樹(shù)的訓(xùn)練

  • 從訓(xùn)練數(shù)據(jù)中隨機(jī)選擇 Ψ 個(gè)點(diǎn)作為子樣本绢彤,放入一棵孤立樹(shù)的根節(jié)點(diǎn)七问;
  • 隨機(jī)指定一個(gè)維度,在當(dāng)前節(jié)點(diǎn)數(shù)據(jù)范圍內(nèi)茫舶,隨機(jī)產(chǎn)生一個(gè)切割點(diǎn) p—— 切割點(diǎn)產(chǎn)生于當(dāng)前節(jié)點(diǎn)數(shù)據(jù)中指定維度的最大值與最小值之間
  • 此切割點(diǎn)的選取生成了一個(gè)超平面械巡,將當(dāng)前節(jié)點(diǎn)數(shù)據(jù)空間切分為2個(gè)子空間:把當(dāng)前所選維度下小于 p 的點(diǎn)放在當(dāng)前節(jié)點(diǎn)的左分支,把大于等于 p 的點(diǎn)放在當(dāng)前節(jié)點(diǎn)的右分支饶氏;
  • 在節(jié)點(diǎn)的左分支和右分支節(jié)點(diǎn)遞歸步驟 2讥耗、3,不斷構(gòu)造新的葉子節(jié)點(diǎn)疹启,直到葉子節(jié)點(diǎn)上只有一個(gè)數(shù)據(jù)(無(wú)法再繼續(xù)切割) 或樹(shù)已經(jīng)生長(zhǎng)到了所設(shè)定的高度 古程。(至于為什么要對(duì)樹(shù)的高度做限制,后續(xù)會(huì)解釋)

1.3整合全部孤立樹(shù)的結(jié)果

由于切割過(guò)程是完全隨機(jī)的喊崖,所以需要用 ensemble 的方法來(lái)使結(jié)果收斂籍琳,即反復(fù)從頭開(kāi)始切,然后計(jì)算每次切分結(jié)果的平均值贷祈。

獲得 t 個(gè)孤立樹(shù)后,單棵樹(shù)的訓(xùn)練就結(jié)束了喝峦。接下來(lái)就可以用生成的孤立樹(shù)來(lái)評(píng)估測(cè)試數(shù)據(jù)了势誊,即計(jì)算異常分?jǐn)?shù) s。對(duì)于每個(gè)樣本 x谣蠢,需要對(duì)其綜合計(jì)算每棵樹(shù)的結(jié)果粟耻,通過(guò)下面的公式計(jì)算異常得分:


h(x) 為 x 在每棵樹(shù)的高度查近,c(Ψ) 為給定樣本數(shù) Ψ 時(shí)路徑長(zhǎng)度的平均值,用來(lái)對(duì)樣本 x 的路徑長(zhǎng)度 h(x) 進(jìn)行標(biāo)準(zhǔn)化處理挤忙。

如果異常得分接近 1霜威,那么一定是異常點(diǎn);
如果異常得分遠(yuǎn)小于 0.5册烈,那么一定不是異常點(diǎn)戈泼;
如果異常得分所有點(diǎn)的得分都在 0.5 左右,那么樣本中很可能不存在異常點(diǎn)赏僧。

1.4偽代碼

1.孤立樹(shù)的創(chuàng)建大猛。
樹(shù)的高度限制 l 與子樣本數(shù)量 ψ 有關(guān)。之所以對(duì)樹(shù)的高度做限制淀零,是因?yàn)槲覀冎魂P(guān)心路徑長(zhǎng)度較短的點(diǎn)挽绩,它們更可能是異常點(diǎn),而并不關(guān)心那些路徑很長(zhǎng)的正常點(diǎn)驾中。


2.每棵孤立樹(shù)的生長(zhǎng)即訓(xùn)練過(guò)程唉堪。

3.為每個(gè)樣本點(diǎn)的高度整合計(jì)算。
其中 c(size) 是一個(gè) adjustment 項(xiàng)肩民,因?yàn)橛幸恍颖军c(diǎn)還沒(méi)有被孤立出來(lái)唠亚,樹(shù)就停止生長(zhǎng)了,該項(xiàng)對(duì)其高度給出修正此改。

2.總結(jié)

孤立森林中的 “孤立” (isolation) 指的是 “把異常點(diǎn)從所有樣本中孤立出來(lái)”趾撵,論文中的原文是 “separating an instance from the rest of the instances”.

大多數(shù)基于模型的異常檢測(cè)算法會(huì)先 ”規(guī)定“ 正常點(diǎn)的范圍或模式,如果某個(gè)點(diǎn)不符合這個(gè)模式共啃,或者說(shuō)不在正常范圍內(nèi)占调,那么模型會(huì)將其判定為異常點(diǎn)。

優(yōu)點(diǎn):

  • Partial models:在訓(xùn)練過(guò)程中移剪,每棵孤立樹(shù)都是隨機(jī)選取部分樣本究珊;
  • No distance or density measures:不同于 KMeans、DBSCAN 等算法纵苛,孤立森林不需要計(jì)算有關(guān)距離剿涮、密度的指標(biāo),可大幅度提升速度攻人,減小系統(tǒng)開(kāi)銷取试;
  • Linear time complexity:因?yàn)?strong>基于 ensemble,所以有線性時(shí)間復(fù)雜度怀吻。通常樹(shù)的數(shù)量越多瞬浓,算法越穩(wěn)定;
  • Handle extremely large data size:由于每棵樹(shù)都是獨(dú)立生成的蓬坡,因此可部署在大規(guī)模分布式系統(tǒng)上來(lái)加速運(yùn)算猿棉。

缺點(diǎn):

  • 若訓(xùn)練樣本中異常樣本的比例較高磅叛,可能會(huì)導(dǎo)致最終結(jié)果不理想,因?yàn)檫@違背了該算法的理論基礎(chǔ)萨赁;

  • 異常檢測(cè)跟具體的應(yīng)用場(chǎng)景緊密相關(guān)弊琴,因此算法檢測(cè)出的 “異常” 不一定是實(shí)際場(chǎng)景中的真正異常杖爽,所以在特征選擇時(shí)敲董,要盡量過(guò)濾不相關(guān)的特征。

3.sklearn

IsolationForest(behaviour=' deprecated", bootstrap=False, contamination=0.1, max_features=1.0, max_samples=' auto',n_estimators=5e, n_jobs=None, random_state=None, verbose=e, warm_start=False)

  • n_estimators : 森林中樹(shù)的顆數(shù)
  • max_samples : 對(duì)每棵樹(shù)掂林,樣本個(gè)數(shù)或比例
  • contamination : 用戶設(shè)置樣本中異常點(diǎn)的比例
  • bootstrap,采樣是有放回還是無(wú)放回
  • max_features : 對(duì)每棵樹(shù)臣缀,特征個(gè)數(shù)或比例

方法

  • predict(X)返回值:+1 表示正常樣本, -1表示異常樣本泻帮。
  • decision_function(X) 返回樣本的異常評(píng)分精置。 值越小表示越有可能是異常樣本。
import numpy as np  
from sklearn.ensemble import IsolationForest  

a=[[1,2,3,4,5,7,8],
[2,3,4,5,6,8,9],
[2,3,4,5,6,7,8],
[1,3,5,6,6,7,8],
[1,10,3,5,6,2,3],
[45,67,88,52,85,84,63]]
df = np.array(a)
rng = np.random.RandomState(42)
n_samples=6  #樣本總數(shù)
# fit the model
clf = IsolationForest(max_samples=n_samples, random_state=rng, contamination=0.33)  #contamination為異常樣本比例
clf.fit(df)
scores_pred = clf.decision_function(df)
print(scores_pred, '----------\n', clf.predict(df))
test=[[2,4,50,3,5,69,8]]
print(clf.decision_function(test))
[ 0.07008625  0.11427815  0.14274793  0.10726402  0.00840173 -0.26031859] 
---------------
 [ 1  1  1  1 -1 -1]
[0.00754274]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锣杂,一起剝皮案震驚了整個(gè)濱河市脂倦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌元莫,老刑警劉巖赖阻,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異踱蠢,居然都是意外死亡火欧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)茎截,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苇侵,“玉大人,你說(shuō)我怎么就攤上這事企锌∮芘ǎ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵撕攒,是天一觀的道長(zhǎng)陡鹃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抖坪,這世上最難降的妖魔是什么萍鲸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮擦俐,結(jié)果婚禮上猿推,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蹬叭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著状知,像睡著了一般秽五。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饥悴,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天坦喘,我揣著相機(jī)與錄音,去河邊找鬼西设。 笑死瓣铣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贷揽。 我是一名探鬼主播棠笑,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼禽绪!你這毒婦竟也來(lái)了蓖救?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤印屁,失蹤者是張志新(化名)和其女友劉穎循捺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雄人,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡从橘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了础钠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恰力。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖珍坊,靈堂內(nèi)的尸體忽然破棺而出牺勾,到底是詐尸還是另有隱情阵漏,我是刑警寧澤驻民,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站履怯,受9級(jí)特大地震影響回还,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叹洲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一柠硕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦蝗柔、人聲如沸闻葵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)槽畔。三九已至,卻和暖如春胁编,著一層夾襖步出監(jiān)牢的瞬間厢钧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嬉橙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留早直,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓市框,卻偏偏與公主長(zhǎng)得像霞扬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拾给,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353