利用高斯分佈進行異常檢測

今天週末,小夥伴們是不是出去浪了,苦逼的小編還在實驗室學習,不是我不想出去,實在是實驗室實行的996工作制。

吐槽歸吐槽,下面就進入本次文章的主題——利用高斯分佈進行異常檢測。

首先什麼是異常,又是通過什麼進行異常檢測?下面小編以對服務器的異常檢測爲例,對相關概念和原理進行解釋。

我們對服務器的檢測一般是居於服務器的運行情況進行判定的,如可以選取吞吐量、響應延時等指標作爲依據。

當服務器運作正常時,它的吞吐量、響應延時應該集中分佈在一個區間段內。當服務器出現異常時,它的這些指標數據往往離集中區間較遠。換句話說就是當一臺服務器的指標數據在集中區間內,那麼這臺服務器是正常的概率很大,反之當一臺服務器的指標數據不在集中區間內,那麼這臺服務器是正常的概率很低,也就是異常的概率很大。

上述數據的特點很像高斯分佈,高斯分佈圖像如下。當數據在 [4,14]這個區間,則概率較大,反之概率較少。


有了這個背景知識之後,我們的想法是利用異常較少的數據集擬合出一個高斯分佈,當要預測一個樣本是否爲異常時,只需將這個新樣本帶入高斯分佈求出概率,如果概率小於指定的閾值時,我們認爲這個樣本是異常的。

第一步:利用極大似然估計法求高斯分佈的參數

有了上面的思想之後,我們第一步就要解決怎麼用數據集擬合一個高斯分佈。我們知道高斯分佈有兩個參數,我們只要求出這兩個參數就可以了。

利用極大似然估計法求高斯分佈的例子如下。


給出的數據集散點圖如下。


對響應延時、吞吐量分別高斯分佈擬合,擬合出的高斯分佈圖如下。



第二步:選擇合適的閾值

在判斷一個新樣本是否異常時,我們將這個新樣本帶入高斯函數計算概率,當概率小於閾值便判定這個樣本出現異常。可想而知,不同閾值的選取,這個模型的效果顯然會不同。

我們的思想是列舉法。應用不同的閾值在驗證集上計算得分,選取得分最高的那個閾值。

最後我們對原始數據集進行異常檢測,將判定爲異常的數據用紅叉突顯。散點圖如下。


結語:這個模型對大致呈高斯分佈的數據集表現良好,對其他數據集表現欠佳。最後,小編提示概率論真的很重要。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章