應用高斯分布來解決異常檢測問題(一)


(原創文章,轉載請注明出處!)

異常檢測的樣本數據,可能有標簽,但通常正常狀況的樣本很多,異常狀況的樣本很少,並且出異常的原因通常也不盡相同。所以,可以只針對正常狀況的樣本建模。

而如果收集到一堆的數據沒有標簽,則可以對所有的樣本數據用一個模型建模,因為通常數據中異常狀況的樣本很少,對最終模型的影響很小。

通常樣本數據是多維的,所在使用高斯分布來建模的時候,可以分別對每一維使用一個一元高斯分,或者是對多維使用使用一個多元高斯分布來描述正常狀況的樣本數據。

這樣得到高斯分布模型對正常狀況的樣本計算得到的概率值就會比較大,對異常狀況的樣本計算得到的概率值就會比較小。

可以設定一個閾值,對一個新樣本,使用訓練得到的多元高斯分布模型計算概率值,如果得到的概率值比閾值小,就認為它是一個異常情況。

一、多個一元高斯分布模型

假設樣本數據是三維。第一維的分布函數:f(x1112) = {1 / [(2π)1/2σ1]} * exp{-(x-μ1)2/(2σ12)}

                             第二維的分布函數:f(x2222) = {1 / [(2π)1/2σ2]} * exp{-(x-μ2)2/(2σ22)}

                             第三維的分布函數:f(x3332) = {1 / [(2π)1/2σ3]} * exp{-(x-μ3)2/(2σ32)}

它們的聯合分布函數:f(x1,x2,x3112222332) = f(x1112) * f(x2222) * f(x3332)    (假設三個維度獨立)

目標就是要估計出三個維度的分布函數中的參數:μ112222332

通過大數定律,一元高斯分布的總體的期望μ的估計值是樣本均值,總體的方差σ2的估計值是樣本方差,即:

μ1 = (1/m)  * [∑i=1m(x1i)]  ,  μ2 = (1/m)  * [∑i=1m(x2i)]  ,  μ3 = (1/m)  * [∑i=1m(x3i)]

σ12 = [1/(m-1)]  * [∑i=1m(x1i1)2]  , σ22 = [1/(m-1)]  * [∑i=1m(x2i2)2]  , σ32 = [1/(m-1)]  * [∑i=1m(x3i3)2]  

這樣就通過訓練計算得到了模型的參數,對新樣本,即可通過f(x1,x2,x3112222332)計算得到它的概率,

通過與閾值比較即可判斷新樣本是否異常。

二、一個多元高斯分布模型

在上面的模型中,假設三個維度特征是獨立的,這在很多情況下不符合實際。可以使用多元高斯分布來克服這個問題。

在多元高斯分布中,每個維度上的隨機變量也服從高斯分布,各維度之間的關系通過協方差矩陣來描述。

所以,使用多元高斯分布來描述樣本數據是,目標就是估計出多元高斯分布密度函數的期望向量和協方差矩陣

還是假設樣本數據是三維的,對期望向量的估計如下:

μ = (1/m)  * [∑i=1m(xi)]    // xi是三維列向量

C = [1/(m)]  * [∑i=1m(xi-μ)(xi-μ)T]    // x, μ是三維列向量

      // 假設 m =3, 即有三個樣本

   = [1/3]  * { (x1-μ)(x1-μ)T + (x2-μ)(x2-μ)T + (x3-μ)(x3-μ)T}

   = [1/3]  * { 

                      +

                      +   }

 同過以上公式及可計算出模型的參數。

 可以看出,以上對多元高斯分布模型的應用,有點類似GDA模型,但不同與GDA,在異常檢測中,只對一類數據進行了建模,

即:只需要計算一個高斯分布的參數,且沒有關於label的0-1分布。

三、樣本數據

上述兩個模型都使用了高斯分布來建模,如果樣本數據的分布不是高斯分布,那么使用模型來進行異常檢測的效果就會不佳。

可以先使用柱狀圖將樣本的數據的各維都plot出來,看柱狀圖的整體形狀是否與一元高斯分布的鍾型圖相似,如果形狀差別比較大,說明樣本數據不是高斯分布。

可以通過對原始的數據計算log、sqrt等方法,將柱狀圖的整體形狀往一元高斯分布的鍾型圖形狀調整。

另外,模型一沒有考慮特征間的相關性,所以有時候可能需要使用已有特征的組合,構造新的特征,以描述原始特征間的關系。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM