本章內(nèi)容:
· 15.1 問題的動機
· 15.2 高斯分布
· 15.3 算法
· 15.4 開發(fā)和評價一個異常檢測系統(tǒng)
· 15.5 異常檢測與監(jiān)督學習對比
· 15.6 選擇特征
· 15.7 多元高斯分布(選修)
· 15.8 使用多元高斯分布進行異常檢測(選修)
內(nèi)容簡介:
異常檢測(Anomaly detection)問題是機器學習算法的一個常見應用措近,它雖然主要用于非監(jiān)督學習問題,但從某些角度看女淑,它又類似于一些監(jiān)督學習問題————主要由positive examples(陽性樣本 or y=1)的數(shù)量來決定的(這點在本次分享中會細說)瞭郑;通過這次學習,我感覺異常檢測更像是“雞蛋外挑骨頭”————即通過對原有的大量雞蛋進行學習來預測或判斷新進的雞蛋中是否出現(xiàn)了異常的“骨頭”鸭你。
15.1 問題的動機
異常檢測定義:
給定數(shù)據(jù)集,假定數(shù)據(jù)集是正常的屈张,通過高斯分布建立一個模型
,通過所構建的模型场绿,根據(jù)新數(shù)據(jù)
的位置告訴我們其屬于該組數(shù)據(jù)的可能性 p(x)爷光。
上圖中,在藍色圈內(nèi)的數(shù)據(jù)屬于該組數(shù)據(jù)的可能性較高,而越是偏遠的數(shù)據(jù)秉犹,其屬于該組數(shù)據(jù)的可能性就越低也搓。
這種方法稱為密度估計驱负,表達如下:
if p(x)
異常檢測實例:
異常檢測主要用來識別欺騙拼缝。例如在線采集而來的有關用戶的數(shù)據(jù)废酷,一個特征向量中可能會包含如:用戶多久登錄一次,訪問過的頁面凿渊,在論壇發(fā)布的帖子數(shù)量,甚至是打字速度等桐猬。嘗試根據(jù)這些特征構建一個模型躺涝,可以用這個模型來識別那些不符合該模式的用戶。
還有就是應用在工業(yè)制造領域。比如某個制造飛機引擎的公司癌佩,從飛機引擎提取出一系列的特征值,并且訓練出一個模型。當新制造出來的引擎符合這個模型時沐兰,就可認為是良品,如果偏離這個模型較遠時朗涩,就可以認為可能有缺陷,需要進一步的檢測旨枯。
異常檢測還可以應用在檢測一個數(shù)據(jù)中心狸膏,特征可能包含:內(nèi)存使用情況,被訪問的磁盤數(shù)量贤旷,CPU的負載广料,網(wǎng)絡的通信量等。根據(jù)這些特征可以構建一個模型幼驶,用來判斷某些計算機是不是有可能出錯了艾杏。
15.2 高斯分布
通常如果我們認為變量x
符合高斯分布
則其概率密度函數(shù)為:
我們可以利用已有的數(shù)據(jù)來預測總體中的\mu和\sigma^2
的計算方法如下:
高斯分布樣例:
注:機器學習中對于方差我們通常只除以m而非統(tǒng)計學中的(m-1)。這里順便提一下盅藻,在實際使用中购桑,到底是選擇使用1/m
還是1/(m-1)其實區(qū)別很小,只要你有一個還算大的訓練集氏淑,在機器學習領域大部分人更習慣使用1/m這個版本的公式勃蜘。這兩個版本的公式在理論特性和數(shù)學特性上稍有不同,但是在實際使用中假残,他們的區(qū)別甚小缭贡,幾乎可以忽略不計。
15.3 算法
前面在講異常檢測時有提到用高斯分布來構建模型p(x)辉懒,這里我們簡單說一下算法:
異常檢測算法:
在異常檢測問題中阳惹,比如用戶反常問題、飛機引擎檢測問題眶俩,我們一般會先選擇一些特征莹汤,當出現(xiàn)異常樣本時,它們的值會異常的非常大或者非常械哂 (在圖像上表示就是在高斯分布的最左側或最右側)体啰,但是一般來說,還是選擇那些能夠用來描述我們所收集的數(shù)據(jù)集一般特性的特征嗽仪。
然后對于給定的數(shù)據(jù)集\mu
\sigma^2$d的估計值荒勇。
(這一步我們可以將看成
,通過向量的思想我們更容易理解。)
一旦我們獲得了平均值和方差的估計值闻坚,給定新的一個訓練實例沽翔,根據(jù)模型計算p(x):
然后我們選擇一個,將p(x)=
作為我們的判定邊界窿凤,當p(x)>
時預測數(shù)據(jù)為正常數(shù)據(jù)仅偎,否則為異常。
15.4 開發(fā)和評價一個異常檢測系統(tǒng)
在這一部分我們會簡單了解如何開發(fā)一個異常檢測的應用來解決實際的問題雳殊,不過我們會將重點放到如何評估一個異常檢測算法橘沥。
在之前的學習中,我們已經(jīng)看到了實數(shù)評估的重要性夯秃,它的主要思想時當我們?yōu)槟硞€應用開發(fā)一個學習算法時座咆,我們需要進行一系列的選擇痢艺,比如選擇使用什么特征等等————如果我們由某種方法,通過放回一個實數(shù)來評估我們的算法介陶,那么就會更容易對這些選擇做出決定堤舒。
比如現(xiàn)在有一個新的特征,我們正在決定該不該納入這個特征哺呜,如果我們分別在納入該特征和不納入該特征情況下運行算法舌缤,然后算法返回一個數(shù)字來告訴我們這個特征對算法的影響是好是壞,這樣的話某残,我們就能更簡單地決定要不要納入這個特征国撵。
為了能夠更迅速地開發(fā)出像上面所說的一個算法評估系統(tǒng)來評估一個異常檢測系統(tǒng),我們可以假設有一些帶標簽的數(shù)據(jù)(y = 0 if normal , y = 1 if anomalous)玻墅,到目前為止我們把異常檢測看成一個無監(jiān)督學習問題是因為用的是無標簽數(shù)據(jù)介牙,但是如果我們有一些帶標簽的數(shù)據(jù)來指明哪些是異常樣本哪些是正常樣本,這就是我們認為能過評估異常檢測的標準方法椭豫。
那么異常檢測算法的開發(fā)過程和評估方法如下:
1、我們先假設有一些訓練集:
Training set: $x1,x2,…,x^m (assume normal examples/not anomalous)
我們把訓練集看作是無標簽的旨指,即這是一個很大的正常樣本(無異常樣本)的集合赏酥。(通常我們把它看作是無異常樣本,當然如果不小心溜進了一些異常樣本也是沒關系的)
2谆构、接下來我們會定義一個交叉驗證集和測試集:
Cross validation set :
Test set :
具體來說裸扶,對于交叉驗證集和測試集,我們假設在交叉驗證集和測試集中包含一些已知的異常樣本(即一些標簽為 y = 1 的樣本)搬素。
現(xiàn)在我們還是拿飛機引擎的例子來做說明:
1呵晨、假設我們現(xiàn)在有:
10000 good (normal) engines
20 flawed engines (anomalous)
對于典型的異常檢測應用來說,異常樣本的數(shù)量熬尺,即 y = 1的樣本大概20~50個摸屠,而且正常樣本的數(shù)量正常來說還會比我們這個例子要大得多。
2粱哼、在有了這些數(shù)據(jù)集后季二,我們把這些數(shù)據(jù)分離到訓練集、交叉驗證集和測試集中:
Training set: 6000 good engines
Cross validation set : 2000 good engines(y=0),10 an0malous(y=1)
Test set : 2000 good engines(y=0),10 an0malous(y=1)
一般我們都會按照60%揭措,20%胯舷,20%的比例來分離數(shù)據(jù),認為CV绊含、TEST dataset是兩個完全不同的數(shù)據(jù)集————把同樣的數(shù)據(jù)同時應用到CV桑嘶、TEST dataset里面在機器學習中是不好的!
3躬充、在給出上面的三個數(shù)據(jù)集后逃顶,我們就可以推導和評估算法了:
Firstly讨便,F(xiàn)it model p(x) on training set {}(這些雖然是無標簽數(shù)據(jù),但實際上我們會把他們看成已知的正常樣本)
Then 口蝠,On a cross validation/test example x ,predict(所以我們也可以將異常檢測算法看成是對交叉驗證集 or 測試集中的 y 標簽進行預測)
然后器钟,使用交叉驗證數(shù)據(jù)集來計算查準率,找回率以及來做出評估:
上面我們提到測試集是帶標簽的妙蔗,這一點和監(jiān)督學習很像傲霸,即算法是對這些標簽做出預測,通過預測成功次數(shù)來評估眉反,但是和監(jiān)督學習不一樣的時候昙啄,監(jiān)督學習的標簽會很傾斜(即y = 0更多),那么分類正確率就不是一個很好的評價指標寸五。
有一點要提的是梳凛,我們會通過使用交叉驗證數(shù)據(jù)集來選擇合適的(用于決定什么時候將一個樣本當作使異常樣本的閾值),來使
的值盡可能的大(或者選擇在其它方面表現(xiàn)比較好的)
補充指標解釋:
TruePosition: 真陽性梳杏,即真實結果是真韧拒,算法的預測結果是真
FalsePositive: 假陽性,即真實結果是假十性,算法的預測結果是真
FalseNegative: 假陰性叛溢,即真實結果是真,算法的預測結果是假
15.5 異常檢測與監(jiān)督學習對比
之前我們構建的異常檢測系統(tǒng)也使用了帶標記的數(shù)據(jù)劲适,與監(jiān)督學習有些相似楷掉,下面的對比有助于選擇采用監(jiān)督學習還是異常檢測:
兩者比較:
異常檢測:
1、非常少量的正向類(異常數(shù)據(jù) y = 1),大量的負向類(y = 0)
2霞势、許多不同種類的異常烹植,非常難。根據(jù)非常少量的正向類數(shù)據(jù)來訓練算法
3愕贡、未來遇到的異巢莸瘢可能與已掌握的異常、非常的不同
4固以、例如: 欺詐行為檢測 生產(chǎn)(例如飛機引擎)檢測數(shù)據(jù)中心的計算機運行狀況
在異常檢測中擬合所有高斯參數(shù)時促绵,通常只需要陰性樣本就足夠了。而且對于“2嘴纺、”這種情況來說败晴,更有可能的是,會對陰性數(shù)據(jù)用高斯模型P(X)來構建模型栽渴,而不是去對y = 1(陽性樣本)建模尖坤,因為明天的異常可能與今天我們所見的都不一樣闲擦。
監(jiān)督學習:
1慢味、同時有大量的正向類和負向類
2场梆、有足夠多的正向類實例,足夠用于訓練 算法纯路,未來遇到的正向類實例可能與訓練集中的非常近似
3或油、無
4、例如:郵件過濾器 天氣預報 腫瘤分類
總結:一般來說驰唬,異常檢測與監(jiān)督學習的區(qū)別是顶岸,當positive examples的數(shù)量足夠大時,達到監(jiān)督學習能夠自己學習出所需要的各種特征叫编,會去用監(jiān)督學習辖佣。
15.6 選擇特征
對于異常檢測算法,我們使用的特征是至關重要的搓逾,下面談談如何選擇特征:
異常檢測假設特征符合高斯分布卷谈,如果數(shù)據(jù)的分布不是高斯分布,異常檢測算法也能夠工作霞篡,但是最好還是將數(shù)據(jù)轉換成高斯分布世蔗,例如使用對數(shù)函數(shù):x = log(x+c),其中c為非負常數(shù);或者x=,c為0-1之間的一個分數(shù)等方法朗兵。
誤差分析:
一個常見的問題是一些異常的數(shù)據(jù)可能也會有較高的p(x)值污淋,因而被算法認為是正常的。這種情況下誤差分析能夠幫助我們矛市,我們可以分析那些被算法錯誤預測為正常的數(shù)據(jù)芙沥,觀察能否找出一些問題诲祸。我們可能能從問題中發(fā)現(xiàn)我們需要增加一些新的特征浊吏,增加這些新特征后獲得的新算法能夠幫助我們更好地進行異常檢測。
異常檢測誤差分析:
我們通尘嚷龋可以通過將一些相關的特征進行組合找田,來獲得一些新的更好的特征(異常數(shù)據(jù)的該特征值異常地大或小)着憨,例如墩衙,在檢測數(shù)據(jù)中心的計算機狀況的例子中,我們可以用CPU負載與網(wǎng)絡通信量的比例作為一個新的特征甲抖,如果該值異常地大漆改,便有可能意味著該服務器是陷入了一些問題中。
15.7多元高斯分布(選修)
假使我們有兩個相關的特征准谚,而且這兩個特征的值域范圍比較寬挫剑,這種情況下,一般的高斯分布模型可能不能很好地識別異常數(shù)據(jù)柱衔。其原因在于樊破,一般的高斯分布模型嘗試的是去同時抓住兩個特征的偏差愉棱,因此創(chuàng)造出一個比較大的判定邊界。
下圖中是兩個相關特征哲戚,洋紅色的線(根據(jù)ε的不同其范圍可大可斜蓟)是一般的高斯分布模型獲得的判定邊界,很明顯綠色的X所代表的數(shù)據(jù)點很可能是異常值顺少,但是其p(x)值卻仍然在正常范圍內(nèi)朋其。多元高斯分布將創(chuàng)建像圖中藍色曲線所示的判定邊界。
在一般的高斯分布模型中祈纯,我們計算p(x)的方法是: 通過分別計算每個特征對應的幾率然后將其累乘起來令宿,在多元高斯分布模型中,我們將構建特征的協(xié)方差矩陣腕窥,用所有的特征一起來計算p(x)粒没。
我們首先計算所有特征的平均值,然后再計算協(xié)方差矩陣:
其中
是一個向量簇爆,其每一個單元都是原特征矩陣中一行數(shù)據(jù)的均值癞松。最后我們計算多元高斯分布的:
其中:是定矩陣,在Octave中用det(sigma)計算
是逆矩陣入蛆,下面我們來看看協(xié)方差矩陣是如何影響模型的:
上圖是5個不同的模型响蓉,從左往右依次分析:
- 是一個一般的高斯分布模型
- 通過協(xié)方差矩陣,令特征1擁有較小的偏差哨毁,同時保持特征2的偏差
- 通過協(xié)方差矩陣枫甲,令特征2擁有較大的偏差,同時保持特征1的偏差
- 通過協(xié)方差矩陣扼褪,在不改變兩個特征的原有偏差的基礎上想幻,增加兩者之間的正相關性
- 通過協(xié)方差矩陣,在不改變兩個特征的原有偏差的基礎上话浇,增加兩者之間的負相關性
多元高斯分布模型與原高斯分布模型的關系:
可以證明的是脏毯,原本的高斯分布模型是多元高斯分布模型的一個子集,即像上圖中前3個例子所示幔崖,如果協(xié)方差矩陣只在對角線的單位上有非零的值時食店,即為原本的高斯分布模型了。
原高斯分布模型和多元高斯分布模型的比較:
原高斯分布模型
1赏寇、不能捕捉特征之間的相關性
但可以通過將特征進行組合的方法來解決
2吉嫩、計算代價低,能適應大規(guī)模的特征
多元高斯分布模型
1嗅定、自動捕捉特征之間的相關性
2自娩、計算代價較高 訓練集較小時也同樣適用
3、必須要有m>n 露戒,不然的話協(xié)方差矩陣 不可逆的椒功,通常需要m>10n ,另外特征冗余也會導致協(xié)方差矩陣不可逆
原高斯分布模型被廣泛使用著捶箱,如果特征之間在某種程度上存在相互關聯(lián)的情況,我們可以通過構造新新特征的方法來捕捉這些相關性动漾。
如果訓練集不是太大丁屎,并且沒有太多的特征,我們可以使用多元高斯分布模型旱眯。
15.8 使用多元高斯分布進行異常檢測(選修)
關于多元高斯分布晨川,看到的一些建立的各種分布模型,當你改變參數(shù)删豺,和
共虑。在這一節(jié)中,我們不妨用這些想法呀页,并應用它們制定一個不同的異常檢測算法妈拌。
回顧一下多元高斯分布和多元正態(tài)分布:
分布有兩個參數(shù),
因此定续,讓我們談談參數(shù)擬合或參數(shù)估計問題:
我有一組樣本\mu
\Sigma$以及標準公式禾锤?
估計他們是你設置 是你的訓練樣本的平均值私股。
并設置:
這其實只是當我們使用PCA算法時候,有時寫出來时肿。所以你只需插入上述兩個公式庇茫,這會給你你估計的參數(shù)
和你估計的參數(shù)
港粱。所以螃成,這里給出的數(shù)據(jù)集是你如何估計
和
.讓我們以這種方法而只需將其插入到異常檢測算法。那么查坪,我們?nèi)绾伟阉羞@一切共同開發(fā)一個異常檢測算法寸宏?
首先,我們把我們的訓練集偿曙,和我們的擬合模型氮凝,我們計算p(x),要知道望忆,設定和描述的一樣
罩阵。