9 Anomaly Detection
9.1 Density Estimation
9.1.1 Problem Motivation
異常檢測(Density Estimation)是機器學習常見的應用,主要用於非監督學習,但在某些方面又類似於監督學習。
異常檢測最常見的應用是欺詐檢測和在工業生產領域。
具體來說工業生產飛機發動機的例子:這個的特徵量假設只有2個,對於不同訓練集資料進行座標畫圖,預測模型p(x)和閾值ε。對於一個新的測試用例xtest,如果p(xtest)<ε,就預測該例項出現錯誤;否則預測該例項正常。
做道題:
B
9.1.2 Gaussian Distribution
認識高斯分佈,或者是正態分佈。學會計算高斯分佈公式中的引數。
x~N(μ,σ^2)意為x屬於高斯分佈,σ是標準差,σ^2是方差。在高斯分佈圖中的意義:μ控制高斯圖的中心位置;σ控制圖形的寬度。p(x;μ;σ^2)表示的是x的概率分佈由μ和σ^2兩個引數控制,表示的是高斯分佈的概率密度函式。注意高斯分佈的陰影面積的積分是1。
下面是不同μ,σ取值下的高斯影像對比:
引數估計問題。在這個例子中,引數估計就是給定資料集,能夠估計出μ和σ^2的值,在這裡其實就是對μ和σ的極大似然估計。
μ=1/m*∑mx(i)
σ=1/m*∑m(x(i)-μ),這裡的m在統計公式寫作m-1,機器學習中寫成m,最後不影響效果。
注意:上面的μ、σ和x(i)都是向量化。
做道題:
9.1.3 Algorithm
利用高斯分佈開發異常檢測演算法。
一個無標籤的訓練集,共有m個訓練樣本。利用p(x)的概率模型來計算出哪些特徵出現的概率比較高。p(x)對應一個從x1到xn(xi是特徵向量的第i維)的獨立假設,其實如果這些樣本不獨立,演算法的效果也還是不錯的。估計p(x)就是密度估計問題。
異常檢測演算法描述:
1.選擇認為可以反映出異常例子的特徵xi。
2.利用訓練集和公式擬合引數μ和σ,不同的特徵對應不同的引數和高斯分佈。
3.對於一個新的例子x,利用高斯分佈公式、擬合的引數以及p(x)的公式計算出p(x),p(x)<閾值ε,則認為該例子為異常。
做道題:
D
9.2 Building an Anomaly Detection System
9.2.1 Developing and Evaluating an Anomaly Detection System
用特定檢測演算法的例子來展現如何利用實數評價法來評價一個異常檢測演算法的步驟。
1.明確資料分佈。6:2:2的訓練集、交叉驗證集和測試集的分法。事先有標記的資料,在訓練時認為是無標記的,在交叉驗證集可以利用標記選擇特徵以及ε引數,測試時又可以利用標記來衡量演算法。
訓練集、交叉驗證集和測試集的資料一定要相互無關,不可以交叉,下面的資料分佈是錯誤的:
2.選擇評價指標(不用準確率是因為存在偏斜率問題)。
在這個例子中,選擇ε的一種方法是迴圈使用交叉驗證集選取不同ε下的F1-積分最大的ε。可以使用交叉驗證集來輔助做出決定,比如確定ε取多大合適,快速確定σ,應該包括哪些特徵下演算法的效果最佳。
具體的演算法的實施如下:
3.最後用測試集來評估這個演算法。
做道題:
C 偏斜率。
9.2.2
討論什麼時候使用異常檢測,什麼時候使用監督學習。
異常檢測和監督學習的樣本分佈的不同。異常檢測:y=1的正例非常少(與y=0的負例比較),新不同型別的正例還會出現(之前的樣本中並沒出現),當前的正例樣本沒有基本覆蓋所有可能的正例情況;監督學習:正例與負例的數量差不多,在樣例中基本覆蓋了正例和負例的所有情況。
異常檢測和監督學習的應用場景的不同:隨著正例樣本與負例樣本的數量變化,異常檢測問題可以向監督學習問題轉換。
做道題:
BD
9.2.3 Choosing What Features to Use
對異常檢測演算法的效率影響較大的因素之一是選擇什麼樣的特徵向量來輸入異常檢測演算法。下面討論如何設計或者選擇異常檢測演算法的特徵變數。以下兩步可以交替進行。
1.變換資料形式,使每維的特徵的分佈服從正態分佈(高斯分佈):得到資料先針對特徵向量為每一維繪圖,看每一維是否看起來像高斯分佈;如果資料的某一維分佈不像高斯分佈,就利用對數或者根指數將該維資料轉換,使轉換後的資料的分佈有高斯分佈的特徵,然後再使用轉換後的新資料到演算法中。matlab中可以使用hist()函式來形成直方圖。
2.選擇異常檢測的特徵變數:通過一個誤差分析,這個和之前學習監督學習演算法時的誤差分析步驟是類似的,先完整地訓練出一個學習演算法,然後再一組交叉驗證集上執行演算法,找出那些預測錯誤的樣本,然後再看看能否找到一些其他的特徵變數,來幫助學習,讓它在那些交叉驗證時判斷出錯的樣本中表現得更好。
如果已存在的特徵不足以判斷出異常例項,可以通過組合特徵變數來捕捉異常。比如下面的關於網路中心檢測的例子:當網路中堵塞,對於特定的機器,除了CPU負載較大,其他情況正常,這時就可以組裝出新的特徵變數x5=(CPU load)/(network traffic)來反映network traffic正常而CPU負載較大的情況。
做道題:
B
9.3 Multivariate Gaussian Distribution (Optional)
9.3.1 Multivariate Gaussian Distribution
介紹多元高斯分佈(multivariate Gaussian distribution):改良的異常檢測,能捕捉到一些之前的演算法檢測不出來的異常。
比如上一節最後"關於網路中心檢測的例子:當網路中堵塞,對於特定的機器,除了CPU負載較大,其他情況正常,這時就可以組裝出新的特徵變數x5=(CPU load)/(network traffic)來反映network traffic正常而CPU負載較大的情況。"
多元高斯分佈構造方法:不再單獨構造不同特徵變數對應的高斯函式,一次性構造p(x),其中引數是μ和描述變數之間相關性的協方差矩陣Σ。其中
看一下取不同μ和Σ時,對多元高斯分佈圖形的影響情況:
9.3.2
將多元高斯分佈應用於異常檢測中:
1.計算μ和Σ。
2.計算新例項x的p(x),比較p(x)和的大小,預測是否異常。
與原來模型的聯絡:
1.當協方差矩陣是對角矩陣時,使用多元高斯分佈和不使用多元高斯分佈的異常檢測演算法的檢測公式相同。
2.1 原來的模型手動建立新的特徵變數來計算異常值;新的模型自動計算不同特徵之間的相關性。
2.2 原來的模型計算量小,適合於大規模的特徵變數(n較大);新的模型計算代價較大。
2.3 原來的模型在m較小的時候仍可以使用;新的模型要求樣本數量m要大於特徵變數n的數量,因為要保證Σ矩陣是可逆的。實際應用中,當m遠遠大於n的時候,差不多m>=10n,採用多元高斯分佈。
實際應用中原來的模型更為常用,一般人會手動增加額外變數。
如果在實際應用中,發現Σ矩陣是不可逆,可能有以下2個方面的原因:
1. 沒有滿足m大於n的條件。
2. 有冗餘變數(至少有2個變數完全一樣,xi=xj,xk=xi+xj)。其實就是特徵變數的線性相關造成的。
做道題:
ACD
練習:
下面2題做錯,不知道正確答案: