異常檢測學(xué)習(xí)筆記--Task05:集成方法

1. 主要內(nèi)容包括:

  • Feature Bagging
  • 孤立森林

2. 學(xué)習(xí)背景:

在實(shí)際場景中月趟,很多數(shù)據(jù)集都是多維度的。隨著維度的增加恢口,數(shù)據(jù)空間的大惺ǘ贰(體積)會以指數(shù)級別增長,使數(shù)據(jù)變得稀疏弧蝇,這便是維度詛咒的難題碳褒。
維度詛咒不止給異常檢測帶來了挑戰(zhàn),對距離的計(jì)算看疗,聚類都帶來了難題沙峻。例如基于鄰近度的方法是在所有維度使用距離函數(shù)來定義局部性,但是两芳,在高維空間中摔寨,所有點(diǎn)對的距離幾乎都是相等的(距離集中),這使得一些基于距離的方法失效怖辆。在高維場景下是复,一個(gè)常用的方法是子空間方法。

3. 解決方式

集成是子空間思想中常用的方法之一竖螃,可以有效提高數(shù)據(jù)挖掘算法精度淑廊。集成方法將多個(gè)算法或多個(gè)基檢測器的輸出結(jié)合起來。
集成學(xué)習(xí)的基本思想是利用不同算法在不同子集的表現(xiàn)特咆,將其集成起來使得輸出更加魯棒季惩。

3.1 feature bagging

Bagging方法通常考慮的是同質(zhì)弱學(xué)習(xí)器腻格,相互獨(dú)立地并行學(xué)習(xí)這些弱學(xué)習(xí)器画拾,并按照某種確定性的平均過程將它們組合起來。
Feature Bagging菜职,基本思想與bagging相似青抛,只是對象是feature。feature bagging屬于集成方法的一種酬核。集成方法的設(shè)計(jì)有以下兩個(gè)主要步驟:

3.1.1 選擇基檢測器

feature bagging常用lof算法為基算法蜜另,下圖是feature bagging的通用算法:


3.1.2 分?jǐn)?shù)標(biāo)準(zhǔn)化和組合方法

把來自各種檢測器的分?jǐn)?shù)轉(zhuǎn)換成可以有意義的組合的歸一化值。分?jǐn)?shù)標(biāo)準(zhǔn)化之后愁茁,還要選擇一個(gè)組合函數(shù)將不同基本檢測器的得分進(jìn)行組合蚕钦,最常見的選擇包括平均和最大化組合函數(shù)亭病。

下圖是兩個(gè)feature bagging兩個(gè)不同的組合分?jǐn)?shù)方法:

  • 廣度優(yōu)先


  • 累積求和


3.2 孤立森林算法(Isolation Forests)

特點(diǎn)

  1. 時(shí)間效率高
  2. 有效處理高維數(shù)據(jù)和海量數(shù)據(jù)鹅很,無須標(biāo)注樣本,在工業(yè)應(yīng)用廣泛罪帖。

算法思想
孤立森林屬于非參數(shù)和無監(jiān)督的算法促煮,通過用一個(gè)隨機(jī)超平面來切割數(shù)據(jù)空間來查找異常點(diǎn)邮屁,切一次可以生成兩個(gè)子空間。然后繼續(xù)用隨機(jī)超平面來切割每個(gè)子空間并循環(huán)菠齿,直到每個(gè)子空間只有一個(gè)數(shù)據(jù)點(diǎn)為止佑吝。直觀上來講,很快被孤立的點(diǎn)就是異常點(diǎn)绳匀。

構(gòu)造方法

  1. 從訓(xùn)練數(shù)據(jù)中隨機(jī)選擇一個(gè)樣本子集芋忿,放入樹的根節(jié)點(diǎn)
  2. 隨機(jī)指定一個(gè)屬性,隨機(jī)產(chǎn)生一個(gè)切割點(diǎn)V疾棵,即屬性A的最大值和最小值之間的某個(gè)數(shù)
  3. 根據(jù)屬性A對每個(gè)樣本進(jìn)行分類戈钢,把A小于V的樣本放在當(dāng)前節(jié)點(diǎn)的左子樹中,否否則放于右子樹中是尔。依次生成隨機(jī)二叉樹
  4. 重復(fù)前一步驟殉了,直到子樹中只有一個(gè)數(shù)據(jù),停止生成拟枚。

孤立森林檢測異常的假設(shè)
異常點(diǎn)一般都是非常稀有的薪铜,在樹中會很快被劃分到葉子節(jié)點(diǎn),因此可以用葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑長度來判斷一條記錄是否是異常的恩溅。在訓(xùn)練時(shí)隔箍,每棵樹的訓(xùn)練樣本是隨機(jī)抽樣的。從孤立森林的樹的構(gòu)造過程看脚乡,它不需要知道樣本的標(biāo)簽鞍恢,而是通過閾值來判斷樣本是否異常。因?yàn)楫惓|c(diǎn)的路徑比較短每窖,正常點(diǎn)的路徑比較長帮掉,孤立森林根據(jù)路徑長度來估計(jì)每個(gè)樣本點(diǎn)的異常程度。

路徑長度計(jì)算方法

4. 總結(jié)

  1. feature bagging可以降低方差
  2. 孤立森林的優(yōu)勢在于:計(jì)算成本相比基于距離或基于密度的算法更兄系洹蟆炊;具有線性的時(shí)間復(fù)雜度;在處理大數(shù)據(jù)集上有優(yōu)勢瀑志;孤立森林不適用于超高維數(shù)據(jù)涩搓,因?yàn)楣膭?lì)森林每次都是隨機(jī)選取維度,如果維度過高劈猪,則會存在過多噪音昧甘。

5.思考題

  1. 為什么feature bagging可以降低方差?
    因?yàn)樽兞恐g具備相關(guān)性战得,不是完全獨(dú)立的充边。
  2. feature bagging存在哪些缺陷,有什么可以優(yōu)化的idea?
    要訓(xùn)練多個(gè)弱學(xué)習(xí)器,計(jì)算開銷大浇冰。優(yōu)化:在隨機(jī)采樣訓(xùn)練若學(xué)習(xí)器前贬媒,對樣本訓(xùn)練集進(jìn)行KNN聚類,篩選明顯存在異常值的樣本集肘习,再進(jìn)行弱學(xué)習(xí)器的訓(xùn)練际乘。

6. 實(shí)驗(yàn)

feature bagging

import pyod.utils.data as data
from pyod.models.feature_bagging import FeatureBagging
import matplotlib.pyplot as plt
import numpy as np

x,y= data.generate_data(n_train=100,n_features=2,contamination=0.1,train_only=True,behaviour='new')
xn=[]
xa=[]
for i in range(100):
    if(y[i]==0):
        xn.append(x[i])
    else:
        xa.append(x[i])
xn=np.array(xn)
xa = np.array(xa)
plt.figure()
plt.scatter(xn[:,0],xn[:,1])
plt.scatter(xa[:,0],xa[:,1], color = 'red')
plt.show()

clf = FeatureBagging()
clf.fit(x)
y_pred = clf.labels_

nr_pred = []  #預(yù)測正常正確
ar_pred = []  #預(yù)測異常正確
ne_pred = []  #預(yù)測正常錯(cuò)誤
ae_pred = []  #預(yù)測異常錯(cuò)誤
for i in range(100):
    if(y_pred[i]==0 and y[i]==0):
        nr_pred.append(x[i])
    if(y_pred[i]==1 and y[i]==1):
        ar_pred.append(x[i])
    if(y_pred[i]==0 and y[i]==1):
        ne_pred.append(x[i])
    if y_pred[i]==1 and y[i]==0:
        ae_pred.append(x[i])

ne_pred=np.array(ne_pred).reshape(-1,2)
nr_pred = np.array(nr_pred).reshape(-1,2)
ae_pred = np.array(ae_pred).reshape(-1,2)
ar_pred = np.array(ar_pred).reshape(-1,2)
plt.figure()
plt.scatter(nr_pred[:,0],nr_pred[:,1],marker='.',c='blue')
plt.scatter(ar_pred[:,0],ar_pred[:,1], marker='.',c = 'red')
plt.scatter(ne_pred[:,0],ne_pred[:,1],marker='*',c='blue')
plt.scatter(ae_pred[:,0],ae_pred[:,1], marker='*',c = 'red')
plt.show()

檢測結(jié)果如上圖所示:
圖一中藍(lán)色是正常數(shù)據(jù)點(diǎn),紅色是異常數(shù)據(jù)點(diǎn)漂佩。
圖二中點(diǎn)是預(yù)測正確的點(diǎn)脖含,星號是預(yù)測錯(cuò)誤的點(diǎn)。

孤立森林實(shí)驗(yàn)

import pyod.utils.data as data
from pyod.models.iforest import IForest
import matplotlib.pyplot as plt
import numpy as np
'''生成同樣example'''
x,y= data.generate_data(n_train=100,n_features=2,contamination=0.1,train_only=True,behaviour='new')
xn=[]
xa=[]
for i in range(100):
    if(y[i]==0):
        xn.append(x[i])
    else:
        xa.append(x[i])
xn=np.array(xn)
xa = np.array(xa)
plt.figure()
plt.scatter(xn[:,0],xn[:,1])
plt.scatter(xa[:,0],xa[:,1], color = 'red')
plt.show()
clf = IForest()
clf.fit(x)
y_pred = clf.labels_
nr_pred = []  #預(yù)測正常正確
ar_pred = []  #預(yù)測異常正確
ne_pred = []  #預(yù)測正常錯(cuò)誤
ae_pred = []  #預(yù)測異常錯(cuò)誤
for i in range(100):
    if(y_pred[i]==0 and y[i]==0):
        nr_pred.append(x[i])
    if(y_pred[i]==1 and y[i]==1):
        ar_pred.append(x[i])
    if(y_pred[i]==0 and y[i]==1):
        ne_pred.append(x[i])
    if y_pred[i]==1 and y[i]==0:
        ae_pred.append(x[i])
ne_pred=np.array(ne_pred).reshape(-1,2)
nr_pred = np.array(nr_pred).reshape(-1,2)
ae_pred = np.array(ae_pred).reshape(-1,2)
ar_pred = np.array(ar_pred).reshape(-1,2)
plt.figure()
plt.scatter(nr_pred[:,0],nr_pred[:,1],marker='.',c='blue')
plt.scatter(ar_pred[:,0],ar_pred[:,1], marker='.',c = 'red')
plt.scatter(ne_pred[:,0],ne_pred[:,1],marker='*',c='blue')
plt.scatter(ae_pred[:,0],ae_pred[:,1], marker='*',c = 'red')
plt.show()

檢測結(jié)果如上圖所示:
圖一中藍(lán)色是正常數(shù)據(jù)點(diǎn)投蝉,紅色是異常數(shù)據(jù)點(diǎn)器赞。
圖二中點(diǎn)是預(yù)測正確的點(diǎn),星號是預(yù)測錯(cuò)誤的點(diǎn)墓拜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末港柜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咳榜,更是在濱河造成了極大的恐慌夏醉,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涌韩,死亡現(xiàn)場離奇詭異畔柔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)臣樱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門靶擦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雇毫,你說我怎么就攤上這事玄捕。” “怎么了棚放?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵枚粘,是天一觀的道長。 經(jīng)常有香客問我飘蚯,道長馍迄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任局骤,我火速辦了婚禮攀圈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峦甩。我一直安慰自己赘来,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撕捍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泣洞。 梳的紋絲不亂的頭發(fā)上忧风,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音球凰,去河邊找鬼狮腿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呕诉,可吹牛的內(nèi)容都是我干的缘厢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼甩挫,長吁一口氣:“原來是場噩夢啊……” “哼贴硫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伊者,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤英遭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亦渗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挖诸,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年法精,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了多律。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搂蜓,死狀恐怖狼荞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帮碰,我是刑警寧澤粘秆,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站收毫,受9級特大地震影響攻走,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜此再,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一昔搂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧输拇,春花似錦摘符、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘩绒。三九已至,卻和暖如春带族,著一層夾襖步出監(jiān)牢的瞬間锁荔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工蝙砌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阳堕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓择克,卻偏偏與公主長得像恬总,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子肚邢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容