Stanford機器學習---第十一講.異常檢測


之前一直在看Standford公開課machine learning中Andrew老師的視頻講解https://class.coursera.org/ml/class/index

同時配合csdn知名博主Rachel Zhang的系列文章進行學習。

不過博主的博客只寫到“第十講 數據降維” 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)且協方差矩陣可逆時,就采用前者多元高斯分布模型。


免責聲明!

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



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