[机器学习笔记]Note13--异常检测
繼續(xù)是機器學習課程的筆記,本節(jié)課內(nèi)容是異常檢測,它是一個非監(jiān)督學習算法,用于發(fā)現(xiàn)可能不應該屬于一個已定義的組中的數(shù)據(jù)。
密度估計
首先是給出一個例子,如下圖所示,是一個測試飛機引擎的例子,給定數(shù)據(jù)集{x(1),x(2),…,x(m)},假設數(shù)據(jù)集是正確的,我們希望知道新的數(shù)據(jù)xtest是不是異常的,即這個測試數(shù)據(jù)不屬于該組數(shù)據(jù)的幾率如何。我們所構(gòu)建的模型應該能根據(jù)該測試數(shù)據(jù)的位置告訴我們其屬于一組數(shù)據(jù)的可能性p(x)。
在上圖中,在藍色圈內(nèi)的數(shù)據(jù)屬于該組數(shù)據(jù)的可能性較高,而越是偏遠的數(shù)據(jù),其屬于該組數(shù)據(jù)的可能性就越低。
這種方法稱為密度估計,表達如下:
異常檢測主要用來識別欺騙。
例如,在線采集而來的有關用戶的數(shù)據(jù),一個特征向量中可能會包含如:用戶多久登陸一次,訪問過的頁面,在論壇發(fā)布的帖子數(shù)量,甚至是打字速度等。嘗試根據(jù)這些特征構(gòu)建一個模型,可以用這個模型來識別那些不符合該模式的用戶。
再一個例子是檢測一個數(shù)據(jù)中心,特征可能包含:內(nèi)存使用情況,被訪問的磁盤數(shù)量,CPU的負載,網(wǎng)絡的通信量等。根據(jù)這些特征可以構(gòu)建一個模型,用來判斷某些計算機是否有可能出錯了。
高斯分布
接下來回顧下高斯分布的基本知識。
通常如果我們認為變量x符合高斯分布,即x~N(μ,σ2),則其概率密度函數(shù)為:
下圖是μ和σ2取不同值時,高斯分布的曲線圖例子:
我們可以利用已有的數(shù)據(jù)來預測總體中的μ和σ2,計算方法如下:
注意,機器學習中對于方程,我們通常只除以m而非統(tǒng)計學中的(m-1)。
異常檢測算法
這里將使用高斯分布來開發(fā)異常檢測算法。
對于給定數(shù)據(jù)集{x(1),x(2),…,x(m)},我們要選擇一個認為可以找出異常例子的特征xi,然后計算其μ和σ2的估計值。
一旦獲得了μ和σ2的估計值,給定新的一個訓練實例,根據(jù)模型計算p(x):
然后設置一個閾值?,當p(x)<?時,可以認為該測試數(shù)據(jù)是一個異常數(shù)據(jù)。
下圖是一個有兩個特征的訓練集,以及特征的分布情況:
下面的三維圖表示的是密度估計函數(shù),z軸為根據(jù)兩個特征的值所估計的p(x)值:
我們選擇一個?,將p(x)=?作為我們的判定邊界,當p(x)>?時預測數(shù)據(jù)為正常數(shù)據(jù),否則就是異常數(shù)據(jù)。
評價一個異常檢測系統(tǒng)
接下來是介紹如何評價一個異常檢測系統(tǒng)。
異常檢測算法是一個非監(jiān)督學習算法,意味著我們無法根據(jù)結(jié)果變量y的值來告訴我們數(shù)據(jù)是否真的是異常的。我們需要另一種方法來幫助檢驗算法是否有效。
當我們開發(fā)一個異常檢測系統(tǒng)時,我們從帶標記(異常或者正常)的數(shù)據(jù)著手,從其中選擇一部分正常數(shù)據(jù)用于構(gòu)建訓練集,然后用剩下的正常數(shù)據(jù)和異常數(shù)據(jù)混合的數(shù)據(jù)構(gòu)成交叉驗證集和測試集。
例如,我們有10000臺正常引擎的數(shù)據(jù),20臺異常引擎的數(shù)據(jù)。我們可以這樣分配數(shù)據(jù):
- 6000臺正常引擎的數(shù)據(jù)作為訓練集
- 2000臺正常引擎和10臺異常引擎的數(shù)據(jù)作為交叉驗證集
- 2000臺正常引擎和10臺異常引擎的數(shù)據(jù)作為測試集
具體的評價方法如下:
異常檢測與監(jiān)督學習之比
上一小節(jié)在評估異常檢測算法的時候,是使用帶有標記的數(shù)據(jù),這與監(jiān)督學習有些相似,兩者的對比如下所示。
| 非常少量的正向類(異常數(shù)據(jù) y=1),大量的負向類(y=0) | 同時有大量的正向類和負向類 |
| 許多不同種類的異常,非常難根據(jù)非常少量的正向類數(shù)據(jù)來訓練算法 | 有足夠多的正向類,足夠用于訓練算法 |
| 未來遇到的異常可能與已掌握的異常非常的不同 | 未來遇到的正向類實例可能與訓練集中國的非常相似 |
| 使用的例子,有如欺詐行為檢測,生產(chǎn)(如飛機引擎),檢測數(shù)據(jù)中心的計算機運行狀況。 | 使用的例子,如郵件過濾器,天氣預報,腫瘤分類 |
選擇特征
對于異常檢測算法,使用的特征是至關重要的,下面將介紹如何選擇特征。
異常檢測假設特征符合高斯分布,如果數(shù)據(jù)的分布不是高斯分布,異常檢測算法也能夠工作,但最好還是將數(shù)據(jù)轉(zhuǎn)換成高斯分布。例如使用對數(shù)函數(shù)x=log(x+c),其中c為非負嘗試;或者x=xc,c是0-1之間的一個小數(shù),等方法。如下圖是一個使用對數(shù)函數(shù)進行轉(zhuǎn)換成高斯分布的例子。
對于如何選擇特征,可以借助誤差分析。我們希望的是對于正常數(shù)據(jù)可以得到大的p(x),而異常數(shù)據(jù)是得到小的p(x)值。
但一個常見的問題是一些異常的數(shù)據(jù)也會有較高的p(x)值,因而被認為是正常的。
這種情況下誤差分析能夠幫助我們,我們可以分析那些被算法錯誤預測為正常的數(shù)據(jù),觀察能否找出一些問題。我們可能能從問題中發(fā)現(xiàn)我們需要增加一些新的特征,增加這些特征后獲得的新算法能夠幫助我們更好地進行異常檢測。
我們通常可以通過將一些相關的特征進行組合,來獲得一些新的更好的特征(異常數(shù)據(jù)的該特征值異常地大或小)。
例如在檢測數(shù)據(jù)中心的計算機狀況的例子中,我們可以用CPU負載與網(wǎng)絡通信量的比例作為一個新的特征,如果該值異常地大便有可能意味著該服務器是陷入了一些問題中。
多元高斯分布
假設有兩個相關的特征,而且這兩個特征的值域范圍比較寬,這種情況下,一般的高斯分布模型可能不能很好地識別異常數(shù)據(jù)。其原因在于,一般的高斯分布模型嘗試的是去同時抓住兩個特征的偏差,因此創(chuàng)造出一個比較大的判定邊界。
下圖是兩個相關特征,紅色的線(根據(jù)?的不同,范圍也可大可小)是一般的高斯分布模型獲得的判斷邊界,很明顯綠色的X所代表的數(shù)據(jù)點可能是異常值,但是其p(x)值卻仍然在正常范圍內(nèi)。多元高斯分布將創(chuàng)建像圖中藍色曲線所示的判斷邊界。
在一般的高斯分布模型中,計算p(x)的方法如下:
通過分別計算每個特征對應的幾率,然后將其累乘起來,在多元高斯分布模型中,我們將構(gòu)建特征的協(xié)方差矩陣,用所有的特征一起計算p(x)。
首先計算所有特征的平均值:μ=1m∑mi=1x(i);
其次,計算協(xié)方差矩陣:∑=1m∑mi=1(x(i)?μ)(x(i)?μ)T=1m(X?μ)T(X?μ)
注意,其中μ是一個向量,其每一個單元都是原特征矩陣中一行數(shù)據(jù)的的均值。
最后計算多元高斯分布的p(x)=1(2π)n2|∑|12exp(?12(x?μ)T∑?1(x?μ))
其中:
- |∑|是定矩陣,在Octave中用det(sigma)計算
- ∑?1是逆矩陣
下面看看協(xié)方差矩陣是如何影響模型的:
上圖是5個不同的模型,從左往右依次分析:
多元高斯分布模型與原高斯分布模型的關系:
可以證明的是,原本的高斯分布模型是多元高斯分布模型的一個子集,即像上圖中的第1,2,3個例子,3個例子所示,如果協(xié)方差矩陣只在對角線的單位上有非零的值時,即為原本的高斯分布模型了。
原高斯分布模型與多元高斯模型比較如下:
| 不能捕捉特征之間的相關性但可以通過將特征進行組合的方法來解決 | 自動捕捉特征之間的相關性 |
| 計算代價低,能適應大規(guī)模的特征 | 計算代價較高 |
| 訓練集較小時也同樣適用 | 必須要有m>n,不然的話協(xié)方差矩陣是不可逆的,通常需要m>10n,另外特征冗余也會導致協(xié)方差矩陣不可逆 |
原高斯分布模型被廣泛使用著,如果特征之間在某種程度上存在相互關聯(lián)的情況,我們可以通過構(gòu)造新特征的方法來捕捉這些相關性。
如果訓練集不是太大,并且沒有太多的特征,我們可以使用多元高斯分布模型。
小結(jié)
本節(jié)內(nèi)容,主要是介紹異常檢測算法,其實現(xiàn)的具體細節(jié)以及應用的一些場景。
總結(jié)
以上是生活随笔為你收集整理的[机器学习笔记]Note13--异常检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 异步IO
- 下一篇: 项目管理:软件工程相关知识笔记