吳恩達機器學習(十五)——異常檢測

問題動機

在這裏插入圖片描述
模型建立
再給定訓練集的情況下,如何檢測某一個輸入x是否異常?

首先要根據訓練集數據建立一個模型,當給定數據的值的時候,則數據被認定爲異常,表示它距離總體數據中心較遠時被認定爲正常。
異常檢測的例子

欺詐行爲識別是異常識別最常用的領域,向量表示用戶i的一系列特徵,如登錄次數,點擊某一個頁面的次數,發帖次數等,根據這些特徵建立模型,然後根據閾值識別欺詐行爲。同樣,異常識別還用於產品檢測等方面。

高斯分佈

高斯分佈
高斯分佈的參數估計

基於高斯分佈的異常檢測算法

模型的構建

假設樣本數據的每一個特徵對應一個高斯分佈,模型等於這些分佈的聯合分佈。通常,統計學上概率聯乘基於獨立性假設,但在實際中,若樣本數量足夠大,是否獨立就不那麼重要了。
異常點檢測

首先選擇可能需要的特徵,擬合特徵的參數,即均值和方差,得到每個特徵的分佈,也可以用特徵向量表示;用所有特徵的聯合分佈構建模型;給定新的樣本點x,根據模型計算值,看其有沒有小於閾值ε。
異常點識別舉例

上圖數據有兩個特徵,擬合每個特徵的參數,p值就表示爲在三維圖上面的高度。

開發和評估異常檢測系統

在進行特徵選擇的時候,如果想知道是否應該加入一個新的特徵,一個數值的評估指標就顯得很重要,那麼在進行特徵選擇的時候可以分別計算加入該特徵和不加兩種情況,當加入該特徵時,返回一個數值指標,可以用來判斷算法效果是否得到了改進。
學習算法的數值評估
數據分類

假設有10000個正常樣本和20個異常樣本,按上面的方式進行評估。根據訓練集求得特徵向量的參數,構造模型,樣本的分類比例有不同的方法,但是不要把把驗證集同時作爲測試集。
算法評估

首先進行模型的構造,對訓練集樣本中的每一個特徵建立高斯分佈擦書,然後通過聯乘建立模型,因爲樣本其實是有標籤的,即,是帶有標籤y的,那麼,y就可以用來幫我們判斷模型的好壞。建立模型以後,在驗證集中進行算法評估,將驗證集中的某一個樣本值x輸入到模型中,根據閾值預測驗證集樣本的標籤,大於閾值則爲正常點,小於閾值爲異常點。然後在與樣本的實際標籤作對比,計算評估指標如準確率,召回率,F-score等。

對於模型中的閾值ε的選擇,可以嘗試不同的ε,然後選擇對應的F-score最大的ε。

既然我們有了帶標籤的數據,爲什麼不適用線性迴歸,邏輯迴歸等方法進行異常點識別呢?

異常檢測VS監督學習

異常檢測與監督學習

異常檢測適用於正樣例(y=1)數量非常少,而負樣例(y=0)數量非常多的樣本。因爲這正樣本正樣例太少,無法找到所有的異常原因,若進行監督學習的話,無法學到所有的知識,還有可能會存在未來會發生的新的異樣,這些異常現在無法觀測的到,更無法進行建模。相反,異常檢測是對大量的負樣例進行建模,這樣任何偏離模型的樣本就可以被識別爲異常,而不用研究異常的原因是什麼。之前在講述有監督的學習的時候提到過例子,垃圾郵件的分類,就是因爲我們擁有的垃圾郵件的數量非常多,可以總結出垃圾郵件的普遍特徵,因此有利於算法學習和建模。

因此,當負樣例即異常點數量非常少的時候,可以使用異常檢測法對數據中的負樣例進行建模,偏離正常點的數據都被認爲是異常點;當負樣例即異常點數量非常多的時候,監督學習算法可以有效地進行學習,因此,這個時候可以選擇監督學習的算法進行異常點識別。

選擇異常算法要使用的功能

特徵分佈的處理

在進行異常檢測的時候,我們認爲數據的分佈符合高斯分佈,然後根據訓練集進行參數估計,再通過聯乘進行模型構建,然後在驗證集中進行驗證。但是,實際上很多特徵的分佈不是符合高斯分佈的,此時我們可以通過變換將其調整爲高斯分佈(實際上樣本數量足夠多的情況下不進行調整也可以,但是如果進行了調整,模型效果肯定會更好)。調整的方式有很多,如上圖所示,可以將參數數值取對數,進行開方等,通過調節冪指數等參數,是數據的分佈趨向於高斯分佈。
 異常檢測的誤差分析

我們希望的得到的模型在正樣例上數值較大,在負樣例上數值較小。我們可以採取這樣的方法,先進行初始模型的建立,在最後分析模型的表現,當模型表現不好的時候在分析可能產生的原因是什麼,根據這些原因再去選擇合適的特徵。一個常見的問題是單一特徵的時候,異常點和正常點的額都很大,此時,就可以添加新的特徵去進行異常點檢測。
特徵選擇示例
我們可以根據對問題的判斷,自己構造特徵。

多變量高斯分佈

異常檢測的一種延伸
異常檢測無法識別的異常
上圖左上角的綠色點是異常數據,因此通常在CPU負載較低的時候,內存使用應該較低,但是這個點不同。當分別考慮CPU負載和內存使用兩個特徵的時候,如右邊兩個座標所示,這個異常點並沒有表現出來異常,從CPU負載來看,小於該點的值也有很多;從內存使用來看,大於該點的也有很多。這樣一來使用異常檢測算法就不能識別出這個異常點,這是因爲進行高斯異常檢測的時候,是按照左圖洋紅色線來劃分的,越靠近內部圓圈的點越是正常,原理內部圓的點越不正常。這樣就忽略了不同特徵之間的關係。

爲了改進這種異常識別算法的不足,就有了改進的異常檢測算法,即多變量高斯分佈 。
在這裏插入圖片描述
多變量高斯分佈
多變量高斯分佈在建立模型的時候不在分別將每一個特徵的分佈看做一個高斯分佈,而是整合成一個分佈,分佈中的參數表示樣本的協方差矩陣。隨着參數的變化,樣本分佈變化如圖:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
當特徵方差同時變化時
當只有一個特徵向量的方差變化時
當兩個特徵向量高度正相關時
協方差矩陣的副對角線上元素的大小表示兩個特徵的相關係數,因此,數值越大,兩個特徵的相關性越大,則樣本分佈圖如上所示。同理,相關係數爲負的時候,表示兩個特徵負相關,則樣本分佈如下所示:
在這裏插入圖片描述
特徵負相關
當改變均值的時候,分佈的峯值會發生改變,即改變均值就是移動整個分佈的中心:
在這裏插入圖片描述
均值改變的多元高斯分佈

多變量高斯分佈的異常檢測

在這裏插入圖片描述
多元高斯分佈的參數估計
在多元高斯分佈中,要估計的參數就是均值向量和sigmoid函數。
在這裏插入圖片描述
多元高斯分佈模型
在求出參數以後,可以按照上述公式建立模型,給定一個新的樣本x,當其小於閾值ε的時候就會被認定爲異常。
在這裏插入圖片描述
與單變量高斯模型的比較
單變量高斯分佈其實就是在樣本特徵相互獨立的時候的一種特殊的多元高斯分佈的情況
在這裏插入圖片描述

傳統高斯分佈與多變量高斯分佈的對比
在傳統的高斯分佈中,如果能手工建立相關特徵之間的關係,捕捉異常關係,那麼是可以使用傳統的高斯異常檢測的,如果不能自己識別建立這種關係,那麼就適合使用多元高斯分佈,它會自動捕捉特徵之間的關係;在訓練集規模較小的時候使用傳統的高斯分佈是可以的,若要使用多元高斯分佈,那麼就要求訓練集數據量要很大,訓練集數據量m要遠遠大於特徵個數n,一般m>10n,效果較好,不然就會出現奇異矩陣。再優點方面,傳統的高斯分佈可能計算較爲簡單,而多元高斯分佈計算量隨着特徵的個數上升。

如果在使用多元高斯分佈的時候產生了奇異矩陣,可能是存在以下兩方面的問題:一是數據量太少,沒有達到遠超過特徵數的要求;另一方面是存在特徵冗餘,即特徵之間存在線性關係。
參考資料 吳恩達機器學習—異常檢測
吳恩達機器學習筆記之異常檢測
吳恩達機器學習中文版筆記:異常檢測(Anomaly Detection)

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