1. 程式人生 > >機器學習-多元高斯分佈(異常檢測)

機器學習-多元高斯分佈(異常檢測)

的系列文章進行學習。

不過博主的部落格只寫到“第十講 資料降維” http://blog.csdn.net/abcjennifer/article/details/8002329,後面還有三講,內容比較偏應用,分別是異常檢測、大資料機器學習、photo OCR。為了學習的完整性,我將把後續三講的內容補充上來,寫作方法借鑑博主Rachel Zhang

本欄目(Machine learning)包括單引數的線性迴歸、多引數的線性迴歸、Octave Tutorial、Logistic Regression、Regularization、神經網路、機器學習系統設計、SVM(Support Vector Machines 支援向量機)、聚類、降維、異常檢測、大規模機器學習等章節。內容大多來自Standford公開課machine learning中Andrew老師的講解和其他書籍的借鑑。(

https://class.coursera.org/ml/class/index

第十一講. 異常檢測——Anomaly Detection

===============================

(一)、什麼叫異常檢測?

(二)、高斯分佈(正分佈

(三)、異常檢測演算法

(四)、設計一個異常檢測系統

)、如何選取或設計feature

)、異常檢測 VS 監督學習

)、多元高斯分佈及其在異常檢測問題上的應用

=====================================

(一)、什麼叫異常檢測?

舉個栗子先:

飛機引擎正常情況下都是OK的狀態,以防出現異常,當有新的引擎來到時,需要用一個模型去測試其 OK or anomaly,類似這樣的問題就是異常檢測問題。

x1和x2是引擎的兩種特徵,資料分佈如下圖1所示。

如果學習得到的模型是p(x),用來描述樣本x屬於not anomaly的概率,設定一個概率閾值,那麼小於這個閾值時,就屬異常。如下圖2所示。


圖1 舉例說明異常檢測問題


圖2 密度估計原理

(二)、高斯分佈(正分佈

高斯分佈又叫正態分佈,這個我們都已經很熟悉了。異常檢測的訓練樣本都是非異常樣本,我們假設這些樣本的特徵服從高斯分佈,在此基礎上估計出一個概率模型,從而用該模型估計待測樣本屬於非異常樣本的可能性。

什麼叫高斯分佈呢?如下圖:

也就是說,高斯分佈包含兩個模型引數:均值,方差(或標準差)

舉例說明這兩個模型引數與高斯分佈曲線的關係,如下圖:

那麼,標準差越大麴線越扁平,資料分佈越發散,反之資料分佈就越集中。

均值和標準差的估計方法如下圖兩個公式:

(三)、異常檢測演算法

假設訓練資料的每一維特徵都服從高斯分佈,那麼我們設計異常檢測演算法的訓練過程如下:

相應的預測流程:


(四)、設計一個異常檢測系統

要設計一個異常檢測系統,我們需要考慮:

1、資料:在異常檢測問題中,訓練集裡只有normal的樣本,但為了測試系統性能等指標,我們當然也需要一些abnormal的樣本。當然也就是說我們需要一批labeled資料,其中normal樣本label為0,abnormal樣本label為1。注意訓練時只用label為0的樣本

2、資料分組:我們需要train,cross validation,test三組資料

3、評估系統:在異常檢測問題中,大部分資料是normal的,所以0和1兩類樣本嚴重不均衡,這時候評估系統性能時就不能簡單地用分類錯誤率或者正確率來描述了。前面也提到過,針對這樣的skewed class,需要用precision、recall、F-measure等概念來度量。

接下來,第一個問題“資料”我們上面已經敘述清楚了,關於第二個問題“資料分組”,我們來舉個栗子:

假如我們所有的飛機引擎資料中有10000個正常樣本,20個異常樣本,此時建議分組比例如下:

  • train set: 6000個正常樣本
  • cross validation set: 2000個正常樣本,10個異常樣本
  • test set: 2000個正常樣本,10個異常樣本

那麼關於第三個問題“系統評估”:

  • train set上獲得概率分佈模型
  • validation/test set上,預測樣本的label(0 or 1)
  • 計算evaluation metrics,可能包括:true positive, false positive, true negative, false negative, precision, recall, F1-score
  • 此外,還可以用以上系統評估的方法,指導分類的概率閾值,即上圖中epsilon的選取。

)、如何選取或設計feature

下面我們說說異常檢測問題中的feature應如何選取或設計。

這部分將介紹兩個方面:一是資料變換,二是增加更具辨別力的feature

一、資料變換

我們知道,上述異常檢測系統是建立在每一維資料都服從高斯分佈的假設基礎上的。那麼如果原始資料並不服從高斯分佈呢?辦法就是,先對原始資料進行某種變換,其實也相當於是設計新的feature。舉例說明如下圖:

左上圖:統計資料x的直方圖,發現基本符合高斯分佈

左下圖:發現數據的直方圖並不符合高斯分佈

右下圖:對x進行log(x)變換以後,統計直方圖基本符合高斯分佈了

類似log(x)的變換有很多,如右上顯示的幾種函式都可以在實驗時嘗試。

下面舉個實驗中的例子,具體闡述一下如何做資料變換。如接下來的幾幅圖所示,程式碼是Octave的:

初始資料是這個樣子的:


hist(x,50)中的50是hist函式的一個引數,這裡不用太在意

好,下面試著找個函式做一下變換,就變成了接下來這樣:

越來越像高斯分佈了,調調函式的引數試試:

很好,這下更接近高斯分佈了。

再試試別的函式,發現可能一下就搞定了,哈哈:

將變換後的符合高斯分佈的資料賦值給新的xNew,拿xNew去估計高斯分佈的兩個引數即可。大功告成!

二、增加更具辨別力的feature

此外,由於我們是靠概率閾值來區分正常和異常樣本的,我們當然是希望異常樣本的概率值小且正常樣本的概率值大。這時容易碰到的問題便是,如果一個測試樣本的預測概率值不大不小恰好在閾值附近的話,預測結果出錯的可能性就比較大了。如下圖所示:

在綠色X樣本的位置,預測概率值對於正常和異常樣本來說都挺大的,很難給出一個正確的判斷。

這時,如果我們有另外一個維度的特徵,在綠色X的位置附近對於正常和異常樣本更有區分度,那麼我們可能就可以對綠色X做出正確的判斷了。如下圖所示,我們增加x2特徵以後,發現綠色X樣本在x2這個特徵維度上的概率p(x2)很小,與p(x1)的乘積自然也較小。從而,當特徵x1無法區分時,特徵x2幫助模型成功辨別了該樣本。

綜上,選取特徵時注意兩點:

1、當特徵資料不符合高斯分佈時,通過統計資料的直方圖分佈,嘗試用多種函式變換資料,使直方圖分佈特性符合高斯模型。

2、當前特徵區分度不夠時,可設計增加更有區分度的特徵,以幫助模型更具辨別力。

)、異常檢測 VS 監督學習

異常檢測介紹到這裡,可能會有人發出這樣的疑問:同樣都是需要正負樣本做訓練,然後對測試樣本預測label,異常檢測和監督學習的區別和聯絡是什麼?什麼樣的問題適合用異常檢測學得的模型解決?同時什麼樣的問題是應該用監督學習的?本節就來分析一下二者的特點和區別,知道了它們的區別,自然也就知道了兩種方法分別適合什麼樣的問題場景了。

二者的特點和區別羅列如下:

1、資料量方面:

異常檢測:前面提到過,異常檢測的資料屬skewed class,即正負樣本的數量非常不均衡,負樣本(normal)很多,正樣本(anomaly)很少,大部分都是normal的資料。

監督學習:正負樣本數量都很多,因為學習演算法需要同時看到儘可能多的正負樣本,才能使學到的模型更具辨別力。

2、資料分佈方面:

異常檢測:前面介紹過,異常檢測的演算法是建立在訓練資料的每一維特徵都是服從高斯分佈的假設基礎上的,而參與訓練的資料只有負樣本。相反地,正樣本(anomaly)資料則是各種各樣的,分佈非常不均勻,不同的正樣本之間相似性很小,也就是Ng說的many different “types” of anomalies。這點其實不難理解,通俗的道理講是:正常的都一樣,不正常的各有各的奇葩之處。

監督學習:正負樣本的資料分別均勻分佈,同類別數據具有較強的相似性和關聯性。

3、模型訓練方面:

異常檢測:鑑於上述資料量和資料分佈的特點,正樣本(anomaly)對於異常檢測演算法不具有很好的參考性,因為它數量少,且風格迥異,不適合給演算法拿去學習。負樣本(normal)就不同了,它們符合高斯分佈,容易學到特徵的分佈特性。而設計異常檢測系統時用到了labeled的正樣本(anomaly)是為什麼呢?注意:它們並沒有參與訓練,沒有參與高斯模型估計,只是用作在validation或test set上的evaluation。

監督學習:正負樣本均參與了訓練過程,理由同樣是上面分析的資料的特點。

綜上所述,可見,辨別用異常檢測還是監督學習模型的關鍵在於,瞭解手頭資料的特點,包括資料量、資料分佈等。

)、多元高斯分佈及其在異常檢測問題上的應用

一、Motivation

為什麼又有了多元高斯分佈的概念呢?下面為了引入motivation,我們舉個用多元高斯分佈比用上述高斯分佈模型更靠譜的栗子

如下圖所示,當x1和x2存在左圖中的線性關係時(這裡可以先不用在意二者的線性關係,後續會詳細講解),綠色X樣本的p(x1)和p(x2)都在閾值範圍內,也就是都沒有小到判為異常樣本的程度(如右圖),那麼它們的乘積自然很有可能也不滿足異常樣本的判定條件。具體地,如左圖,紫色的圓圈越往外,屬於正常樣本的概率就越小,圓心點的概率最大。這時我們看到綠色X測試樣本和幾個紅色X訓練樣本距離圓心的距離是相近的,也就是擁有相似的概率值,那麼綠色點就會被判為和紅色一樣是正常樣本了。


二、多元高斯模型公式

與上面介紹的假設每一維資料都是相互獨立的高斯分佈模型不同的是,多元高斯分佈整體考慮所有維度的資料。

同樣有兩個引數,均值和協方差矩陣,公式如下圖所示,其中 |Sigma| 表示的是協方差矩陣Sigma的行列式。

注意,我們上面所說的x1和x2存在的線性關係,實際上就蘊含在協方差矩陣中,所以也就是說多元高斯分佈與相互獨立的一元高斯分佈之間的差異就在於,前者考慮了不同資料分佈之間的關係,而後者則認為它們是無關的、獨立的。

接下來舉例說明多元高斯分佈模型與資料關係之間的聯絡:

(1)如下圖,當協方差矩陣的對角線元素相等時,三維空間中的模型曲面在兩個維度上展開範圍也是相等的


(2)如下圖,當對角線元素不等時,曲面在兩個維度上的展開範圍大小有了區分。如右一的圖,概率值沿x2方向比沿x1方向下降得快。


(3)下面幾張圖的變換也很重要,只是這裡不做詳細解釋了。大家可通過觀察協方差矩陣和均值向量的值,結合看相應的圖形,來體會多元高斯模型與資料關係之間的聯絡。




三、用多元高斯模型建模的異常檢測演算法

演算法如下圖所示:


觀察上圖的右圖可見,當用多元高斯模型時,如果兩個維度的資料存在某種線性關係,這種關係會很容易被捕捉到,並正確指導測試樣本的判別。

四、多元高斯模型與多個獨立的一元高斯模型之間的聯絡

不難發現,其實,後者是前者的特殊形式,其關係如下:

當且僅當協方差矩陣是一個對角陣時,且對角元素等於各個維度的方差,則此時的多元高斯模型就等價於多個獨立的一元高斯模型。如下圖:


也就是說,這種特殊情況下,各個維度的feature之間相互獨立,不存在任何線性或非線性關係,從而三維曲面只在不同維度上有不同的展開寬度,而不會像上面的幾個例子那樣產生45°的傾斜。

知道了兩者的聯絡以後,我們就要想了,那什麼時候用多元高斯模型什麼時候假設相互獨立的一元高斯模型呢?總結二者的區別如下(前者指多元高斯模型,後者指一元高斯模型):

1、特徵選擇:

對於同樣的一組已知資料,假設{x1,x2},x1和x2都不能很好地區分的話,如果選用後者的模型,正如我們在特徵選取一節中介紹的那樣,可能需要我們人工設計一個更具辨別力的feature(比如x1/x2);但如果選用前者模型的話,多元高斯模型會自動學習x1和x2的關係,就無需人工設計feature了

2、計算效率:

後者的計算效率更快一些,因為它不涉及到協方差矩陣求逆等一些複雜的矩陣運算。所以當樣本維度n很大時,一般n=100,000或10,000時認為很大了,更多采用後者的模型。否則協方差矩陣將是n*n大小的,求逆運算會很慢很慢。

3、關於樣本數量m和樣本維度n:

綜上,當m比較小時,更適合用後者模型,因為少量的樣本不容易學到資料間的複雜關係;當m>>n(比如m=10n)且協方差矩陣可逆時,就採用前者多元高斯分佈模型。