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

Stanford機器學習-異常檢測和多元高斯分佈

一、異常檢測

這章主要學習異常檢測問題,它是機器演算法的一個常見應用,同時也對於我們生活中的很多問題有很大的幫助,總的來說,它主要用於非監督的學習問題。
在這裡插入圖片描述
那我們怎麼來理解異常檢測是一個怎麼樣的問題呢?我們來看一個相關的問題:飛機引擎的檢測。因為引擎對於飛機來說是一個很重要的部件,所以對於它的質量把關,是一個很重要的事。假如我們通過檢測測得了引擎的發熱量記為 x1 ,引擎的振動記為 x2 等等一系列的特徵引數,這樣我們就得到了一個數據集 {x1 , x2 , …,xm}。我們將其影象化後,就可以得到上圖的點分佈圖,圖中的每個×就是我們的一個數據。

在這裡插入圖片描述

那麼當我們得到一個新的引擎的監測資料Xtest時,我們如何判斷它是否是一個異常的資料呢?這就是我們要解決的問題。假設我們的資料集中所有的 × 所代表的就是正常的引擎,我們可以將其以中心擴充套件為多個同心圓,越靠近中心的資料,是正常的概率就越大。當我們得到一個新資料時,我們將其在圖中表示,判斷他在這個模型P(x)中的值,如果它大於某一個閾值,我們就認為它是正常的,否則認為存在問題,需要進一步的檢測。

在這裡插入圖片描述

異常檢測在日常中應用最廣泛的地方就是欺詐的識別。我們呢可以線上採用多個使用者的多個特徵資料,來構建一個模型P(x),這些特徵可能包括登入的頻率、訪問的歷史紀錄等等。當有新的使用者時,我們就可以採集相關的特徵,使用P(x)來判斷是否是有欺詐可能性的使用者。另外一個常用的地方就是資料中心對於異常電腦的檢測,我們可以採集一些特徵,比如記憶體的利用、磁碟的訪問量、CPU的負載等等,同樣我們可以根據需要構造一些特徵資料,來幫助我們構建模型,從而用來判斷是否有電腦出現異常。

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

在這裡插入圖片描述

高斯分佈是統計學中一個很重要的分佈,學過數理統計的應該對它都不會感到陌生。下面我們對高斯分佈的相關知識做一個回顧。假設我們的資料 x 服從均值為 μ ,方差為σ^2的高斯分佈,我們就可以寫成 x ~ N ( μ , σ ),他對應的概率密度函式如下

在這裡插入圖片描述
將資料畫在圖中,我們可以看出它是一個對稱的鐘形的曲線,μ 表示對稱點的位置,而 σ 表示資料偏離中心軸的多少。
在這裡插入圖片描述
那我們如何根據現有的資料來得到 μ 和 σ 這兩個引數呢?我們通常使用如下的公式計算

在這裡插入圖片描述
這裡我們計算方差的公式中使用的是 m ,在之前統計學中見到的公式,可能用的是 m-1,其實兩個在使用中並沒有那麼大差別,在機器學習中我們常使用的是 m 。
在這裡插入圖片描述
當給定不同的均值和方差時,我們就可以得到不同的高斯分佈,上圖是不同引數的幾個高斯分佈的例子。

三、使用高斯分佈的異常檢測演算法

在這裡插入圖片描述
在我們擁有的資料集中{x1 , x2 ,…,xm},我們包含多個特徵,我們可以針對每一個特徵 xi 利用上面的公式來計算 μ 和 σ^2,我們就可以得到m 個高斯分佈,我們便可以構建模型
在這裡插入圖片描述


當給定一個新的例項時,我們就可以根據模型來計算p(x)的值,當結果小於給定的閾值時,我們說就發生了異常。

在這裡插入圖片描述
具體的演算法的過程如上圖所示。

在這裡插入圖片描述
假如我的資料集中只有兩個特徵 x1 和 x2 ,我們將其畫圖便可以得到左上圖的影象,同樣我們根據公式分別計算兩個特徵對應的高斯分佈的引數,並畫出對應的影象。在三維影象中表示,如右下圖所示,影象的高度就是p(x) 的值。我們給定一個閾值 0.02,當有新的資料時(如綠色×),帶入模型計算相應的值,,來判斷是否有異常。

四、開發和評價一個異常檢測系統

在這裡插入圖片描述
當我們開發了一個異常檢測的演算法後,如果我們有一個衡量標準後,我們就可以相對容易的評價模型的好壞。假設我們擁有一些帶標籤的資料(y = 0 表示正常,y = 1表示異常),我們便可以將其分為訓練集、交叉驗證集和測試集。
在這裡插入圖片描述
在我們前面飛機引擎的例子中,假設我們現在的資料集中包含1000個好的引擎,20個不好的。我們就可以將其進行如下的劃分:
• 訓練集:6000個好的引擎資料,構建一個模型
• 交叉驗證集:2000個好的+10個異常的資料
• 測試集:2000個好的+10個異常的資料
或者使用其他的分配策略也是可以的。
在這裡插入圖片描述
那我們怎麼在分好的資料集中訓練模型呢?我們使用資料集構建了模型p(x);然後在交叉驗證集上,我們嘗試不同的 ε 做我們的閾值,然後根據查準率、查全率或是F1值來選擇最好的 ε ;選擇好之後,我們就可以在測試集上進行預測,計算異常檢驗系統的相關評價標準。

五、監督學習和異常檢測的對比

在這裡插入圖片描述
在前面我們說過,在異常檢測中,我們使用的也是帶標籤的資料,那麼它和學過的有監督學習有什麼區別呢?當我們擁有非常少的正類資料,而反類資料很多時,以及許多不同種類的異常,使得模型很難從正類資料中學習到異常應該是什麼樣子,而且未來遇到的異常可能與已掌握的異常非常的不同,這樣的情況我們將使用異常檢測。但當我們同時有大量的正類資料和反類資料時,我們有足夠多的正向例項,用來訓練演算法,而且未來遇到的正向例項可能與訓練集中的非常近似,這時我們應使用監督學習演算法。
在這裡插入圖片描述
異常檢測常用於:欺詐行為的檢測、生產中產品質量的檢測、資料中心中異常電腦的監控。
監督學習就不陌生了,常用於郵件分類、天氣預報和腫瘤分類等。

六、特徵的選擇

在這裡插入圖片描述
在異常檢測演算法中,合適的特徵的選擇對於演算法來說有著很重要的影響。我們假設檢測的特徵符合高斯分佈,如果現有的資料並不是很明顯的滿足高斯分佈時,我們可以將其取對數或者進行冪次計算,將其轉換成高斯分佈。

在這裡插入圖片描述
在異常檢測中,當我們遇到一些新資料時,將其輸入模型,也可以得到很高的 p(x) 的值,從而被演算法誤認為是正常的,這將有很大的影響。我們需要誤差分析來幫助我們分析那些被誤分的資料,觀察能否找出一些問題,然後通過構建新的特徵來使得演算法發揮更好的作用。
在這裡插入圖片描述
例如前面資料中心的例子中,我們有如上的諸多特徵,有時現有的特徵會遺漏一些問題,這時就需要我們進行特徵的組合,比如我們可以將CPU負載和網路流量組合,建立新的特徵 x5 x6等,如果對應的值異常的大,說明就有問題了。

七、多元高斯分佈

在這裡插入圖片描述
假設我們有兩個相關的特徵,而且每個特徵的值域範圍很大時,一般的高斯模型將不能很好的識別異常的資料。比如左上圖,我們根據不同的 ε 可以畫出不同的邊界,加入新的資料如綠色的×,他很可能是異常的,但是在現有的模型下,他會被判為正常的。因為一般的高斯模型所做的是嘗試同時抓兩個特徵的偏差,這樣邊界的範圍就會變得很大。所以我們需要使用多元高斯分佈來解決這個問題,也就是建立藍色的邊界。
在這裡插入圖片描述
在一般的高斯分佈中,我們首先計算每個特徵的p(x),然後將其連乘。而在多元高斯分佈中國,我們需要構建特徵的協方差矩陣,用所用的特徵一起來計算p(x)。我們先計算特徵的均值和協方差矩陣:
在這裡插入圖片描述
最後計算多元高斯分佈的p(x)

在這裡插入圖片描述
下面是有關不同的μ 和協方差矩陣 Σ 的影象,當引數不同時,得到的影象也就有相應的區別。
在這裡插入圖片描述
當μ 相同時,Σ 的主對角線上的值越小,則影象越窄,越大時越寬。
在這裡插入圖片描述
當改變 Σ 主對角線某一個值時,他會在相應的跨度上做出改變。
在這裡插入圖片描述

在這裡插入圖片描述
在保持原有偏差的基礎上增加兩者的正相關性。
在這裡插入圖片描述

在這裡插入圖片描述

在保持原有偏差的基礎上增加兩者的負相關性。一般的高斯分佈是多元高斯分佈的子集,即在協方差矩陣的主對角線上元素不為零,其餘都是零。下面是關於一般高斯模型和多元高斯分佈模型的一個對比
在這裡插入圖片描述

在一般高斯模型中,如果特徵之間存在著某種程度上相互關聯,我們可以通過構建新的特徵來捕捉相關性。但如果訓練集不大,特徵相對較少時,我們可以使用多元高斯分佈模型。

八、在異常檢測中使用多元高斯分佈

在這裡插入圖片描述
上面我們看到了有關多元高斯分佈的情況,當我們的引數不同時,我們可以得到不同的模型,那我們怎麼將其應用到異常檢測中呢?在多元高斯分佈中,我們的引數是 μ (n1的向量)和 Σ (nn的矩陣),我們需要使用資料來擬合這些引數。假如我們有資料集{x1 ,x2, …, xm},我們可以使用如下的公式來擬合
在這裡插入圖片描述
在這裡插入圖片描述
那麼我們如何將上面的一切應用到異常檢測演算法中呢?首先我們需要根據我們的資料集擬合引數,構建多元高斯分佈模型p(x),然後在給定一個新的值時,我們根據上面的公司計算p(x)的值,和設定的閾值進行比較,判斷是否出現異常。
在這裡插入圖片描述

在這裡插入圖片描述
上面是原始模型和多元高斯分佈的一個對比。原始模型需要我們手工的構建一些特徵來把握特徵件的聯絡,但是計算量小,當資料量較小時,我們可以使用。但多元高斯分佈模型可以自動的抓住特徵間的聯絡,計算量相對較大,通常用在特徵較少的情況下