在接下來的一系列課程中,我將向大家介紹異常檢測(Anomaly detection)問題。這是機器學習算法的一個常見應用。這種算法的一個有趣之處在於它雖然主要用於非監督學習問題,但從某些角度看,它又類似於一些監督學習問題。
1 定義
異常檢測問題更正式一些的定義如下:
假設我們有m個正常的樣本數據
{x(1),x(2),…,x(m)}
,我們需要一個算法來告訴我們一個新的樣本數據
xtest
是否異常。
我們要採取的方法是:給定無標籤的訓練集,對數據集x建立一個概率分佈模型
p(x)
。當我們建立了
x
的概率模型之後,我們就會說,對於新的飛機引擎
xtest
,如果概率p低於閾值ε:
p(xtest)<ε
那麼就將其標記爲異常。
因此當我們看到一個新的引擎在我們根據訓練數據得到的
p(xtest)
kai模型中概率非常低時,我們就將其標記爲異常;反之如果
p(xtest)
大於給定的閾值
ε
,我們就認爲它是正常的。
2 高斯分佈中,μ和σ的關係
我們舉例來說明一下高斯分佈中μ和σ這兩個參數之間的關係:
μ=0,σ=1 |
μ=0,σ=0.5 |
μ=0,σ=2 |
μ=3,σ=0.5 |
|
|
|
|
具體來說,高斯分佈中的參數估計公式如下:
μ=1m∑i=1mx(i)
σ2=1m∑i=1m(x(i)−μ)2
還有一點,如果你在學習統計學時,可能會見到這個式子:
σ2=1m−1∑mi=1(x(i)−μ)2
,但在機器學習領域,大家習慣使用
σ2=1m∑mi=1(x(i)−μ)2
,其實在實際情況中,具體使用
1m
還是
1m−1
其實區別很小,只要你有一個稍大的數據集。這兩個版本的公式在理論特性和數學特性上稍有不同,但在實際應用中,他們的區別甚小,幾乎可以忽略不計。
3 異常檢測的具體算法
假如說我們有一個無標籤的訓練集,其中共有m個訓練樣本,並且這裏的訓練集裏的每一個樣本都是n維的特徵,因此你的訓練集應該是m個n維的特徵構成的樣本矩陣:
{x(1),…,x(m)}x∈Rn
對於我們的異常檢測算法,我們要從數據中建立一個p(x)概率模型。由於x是一個向量,因此:
p(x)=p(x1)p(x2)p(x3)…p(xn)
我們假定特徵x_1服從高斯正態分佈:
x1∼N(μ1,σ21)
根據上節學到的知識,你可以得出對應的μ_1和σ_1:
μ1=1m∑i=1mx(i)1
σ21=1m∑i=1m(x(i)1−μ1)2
這樣p(x_1)就可以寫成這樣一個高斯分佈:
p(x1)=p(x1;μ1,σ21)
同樣地,我假設x_2也服從高斯分佈,可以得出:
p(x2)=p(x2;μ2,σ22)
與此類似x_3服從另外一個高斯分佈:
p(x3)=p(x3;μ3,σ23)
直到x_n:
p(xn)=p(xn;μn,σ2n)
因此可以得出:
p(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)p(x3;μ3,σ23)…p(xn;μn,σ2n)=Πnj=1p(xj;μj,σ2j)
其中Π(讀作pai,是π的大寫形式)類似∑符號,只不過這裏將連加換成了連乘。順便要說的是,估計p(x)的分佈問題,通常被稱爲密度估計問題。
4 異常檢測算法步驟總結
讓我們來總結一下異常檢測算法的具體步驟:
1.從樣本中選擇一些能體現出異常行爲的特徵x_i。
我們可以嘗試找出一些特徵,比如在你的系統裏,那些能看出用戶異常行爲或者欺詐行爲的特徵。
2.分別計算出每個特徵的參數
μ1,…,μn,σ21,…,σ2n。
μ=⎡⎣⎢⎢⎢⎢μ1μ2┋μn⎤⎦⎥⎥⎥⎥=1m∑i=1mx(i)
σ2=⎡⎣⎢⎢⎢⎢σ21σ22┋σ2n⎤⎦⎥⎥⎥⎥=1m∑i=1m(x(i)−μ)2
其中:
μj=1m∑i=1mx(i)j
σ2j=1m∑i=1m(x(i)j−μj)2
對
m
個無標籤數據分別計算出他們每個特徵的期望
μ
和方差
σ2
。注意,這裏μ和σ都是m維度的向量,而
μj
和
σj
都是其中對應的第j個元素。
3.給定一個新的樣本x,計算出它對應的p(x):
p(x)=Πnj=1p(xj;μj,σ2j)=Πnj=112π√σjexp(−(xj−μj)22σ2j)
通過判斷p(x)<ε,來判斷是否有異常發生。
給定一個用戶行爲的樣本,如何知道用戶行爲是否異常呢?我們將用戶行爲數據帶入到p(x)的計算中來,如果這個結果非常小,那麼我們就將這個行爲標註爲異常行爲。
異常分析例子
假如說我們有下面這樣的數據集:
從圖中我們可以看出,數據集有兩個特徵
x1和x2
。
其中特徵
x1
對應的是水平方向的數據,它的均值是5,標準差是2;x_2對應的是豎直方向上的數據,它的均值是3,標準差是1:
μ1=5,σ1=2
μ2=3,σ2=1
這兩個特徵對應的分佈如下:
p(x1;μ1,σ21)
|
p(x2;μ2,σ22)
|
|
|
如果繪製出p(x)的圖像,那麼這個圖像如下:
假如x_1=2,x_2=2那麼就是這個點:
在3-D表面圖上的高度就代表p(x)的值。而這個p(x)完整的寫出來就是下面的形式:
p(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)
那麼有了這個表達式,我們如何鑑定新的樣本是否異常呢?
要回答這個問題,我們可以先給計算機設某個無窮小的數值ε,假如我設置ε=0.02(我會在後面講到如何選取ε的值)。
現在我們有兩個樣本,分別爲
x(1)test和x(2)test
:
我們用上面的式子來計算出
p(x(1)test)
,可以發現這是一個比較大的數,具體大小是大於等於
ε
的,所以對於
x
:
我們用上面的式子來計算出
p(x(1)test)
,可以發現這是一個比較大的數,具體大小是大於等於
ε
的,所以對於
x(1)test的檢測結果是不屬於異常。同測結果是不屬於異常。同樣對於p(x(2)test)
,我們發現這是一個很小的數,具體值是小於
ε
的,所以我們說
x(2)te對於p(x