一. 概率密度估計

1.異常檢測

對於飛機引擎有特徵 x_1,x_2 …,數據集如下所示。對於一個新的引擎,我們希望知道它是否是存在異常,例如下圖所示。它可能是正常的引擎,也可能是異常的引擎。

對於 x_{test} , 若 p(x_{test})<varepsilon , 則為異常;否則為正常。下面是幾個異常檢測的應用:1.監測用戶異常行為;2.工業製造(飛機引擎);3.監測工作異常的計算機。

2.高斯分布

高斯分布也稱正態分布。下面兩張圖分別為為高斯分布的函數圖像及表達式,以及均值 mu 和標準差 sigma 對高斯分布圖形的影響。

我們假設一個數據集服從高斯分布, 那麼我們可以進行參數估計,即 musigma 可通過如下公式得出:

3.異常檢測演算法

下圖展示了異常檢測演算法的流程。目的是計算出 p(x) 的值,若 p(x)<varepsilon ,則為異常;若 p(x)≥varepsilon ,則該樣本為正常。

二. 開發異常檢測系統

1.開發與評估

在開發學習演算法的時候,我們希望有一種評估這個演算法的方式。為了能夠評價一個異常檢測系統,我們假設我們有一些含標籤的數據(如果正常, 則y=0;如果異常y=1)。因為我們要通過訓練集來做概率密度估計,所以認定訓練集都是非異常的樣本。

下面舉個例子。假設我們有10000個正常的引擎,20個異常的。將10000個正常中的6000個作為訓練集,2000個作為交叉驗證集,另外2000個作為測試集;再將一半異常的樣本放入交叉驗證集,另一半放入測試集。下圖展示了這種分配數據集的方法,還有一種方法如下圖alternative所示,但不推薦這種方法。

下圖展示了一些可以用來評估演算法的方式,前面已經講過這些內容,對於一個偏樣本來說,可以計算其準確率(precision)和召回率(recall),在計算F1-score,選擇一個最佳的F1-score。我們可以利用交叉驗證集來選取一個合適的 varepsilon

2.異常檢測 vs 監督學習

上一小節我們學習了異常檢測演算法,它是一種無監督學習演算法,但是這個演算法中的數據集似乎是有標籤的(「異常」, 「非異常」),那麼我們為什麼不直接使用一種監督學習的方法呢?下圖展示了異常檢測演算法和監督學習演算法的對比。

從圖上可以看出,異常檢測適用於正樣本數量小而負樣本數量很大的情況;而監督學習適用於正樣本和負樣本都有相當大的數量。此外,如果我們可以從足夠的正樣本中學習到正樣本發生的各種情況,並且未來的數據也會和我們學習到的情況非常相似,那麼更適合使用監督學習;如果我們不能夠對所有異常情況了解,那麼異常檢測將會更合適。

3.特徵選擇

當描繪出特徵的分布圖的時候,如果近似高斯分布就可以直接使用異常檢測。如果不是高斯分布, 則對特徵進行某個數學變換也可以得到近似高斯分布,如下圖所示。

某些情況下,在評估異常檢測系統的時候,我們發現對於一個異常點x它的p(x)比較大,這個時候我們就需要對這個點進行分析,然後總結出一個新的特徵。 如下圖所示, 一開始這個點的分布在下左圖,看上去像一個非異常點;分析並加入新的特徵之後,這個點的分布在下右圖,這個時候我們的異常檢測系統就可以判斷該點為異常點。

下面舉個例子,我們想要監測計算機是否正常工作,特徵如下圖所示。假設CPU負載和網路流量成線性關係,如果想要監測某台計算機是否卡在一個死循環中,我們可以加入 x_5x_6 這樣的特徵。正常情況下,這個特徵的值應該保持不大不小,若某台計算機進入了死循環,那麼它的CPU負載應該很大,但是網路流量很小,這個時候這個特徵的值就會變的很大。異常檢測系統就很容易監測出這樣的情況。


推薦閱讀:
相关文章