1. 程式人生 > 其它 >機器學習筆記13

機器學習筆記13

異常檢測

1.1 問題動機 problem motivation

在機器學習中有一個常見的應用就是異常檢測問題(Anomaly detection),主要應用在無監督學習上,當然,有時候也會應用在監督學習上

舉例: 當飛機引擎從生產線上流出時需要進行QA(質量控制測試),資料集包含引擎的一些特徵變數,比如運轉時產生的熱量,或者振動等。當有一個新的飛機引擎從生產線上流出,它具有特徵變數 xtest 。異常檢測問題就是:希望知道這個新的飛機引擎是否有某種異常

檢測的方法是通過訓練出的模型,根據 xtest 的位置告訴我們其屬於正常資料組的可能性 p(xtest)

採用密度估計的方法來檢測,公式被定義為:

如下圖,藍色圈內的資料屬於正常資料組的可能性較高;而越偏遠,屬於該資料組的可能性就越低

除了飛機引擎的例子,還有一些常見的檢測異常例子

比如:

詐騙檢測:線上採集的使用者資料,特徵可能包含:使用者多久登入一次,訪問過的頁面,在論壇釋出的帖子數量,甚至是打字速度等。根據這些特徵構建模型,用來識別非法的使用者

資料中心檢測:特徵可能包含:記憶體使用情況,被訪問的磁碟數量,CPU 的負載,網路的通訊量等。根據這些特徵構建模型,用來判斷某些計算機是否可能出錯了

1.2 高斯分佈 Gaussian distribution

高斯分佈也稱為正態分佈,它有兩個引數分別是均值 μ 和方差 σ2 ,通常如果變數 x 符合高斯分佈 x∼N(μ, σ2

) 則其概率密度函式為 :

對於不同的 μ 和 σ ,高斯分佈呈現出不同的影象

在高斯分佈中需要記住的兩個公式分別為:、

值得注意的是在機器學習中方差通常除以 m,而在統計學中是除以(m − 1)。這兩個公式在理論和數學特性上稍有不同,但在實際使用中由於資料集比較大,所以幾乎可以忽略不計

1.3 異常檢測演算法 Algorithm

介紹了異常檢測和高斯分佈之後,我們就可以把二者結合起來了

首先計算訓練集中每一個特徵的均值 μ 和方差 σ2 ,然後分別求得相應的概率密度函式 P(x;μ,σ2),最後把所有概率密度函式 P(x;μ,σ2) 進行連乘得到 P(x)

當出現一個新的例項時,可以將例項帶入 P(x) 求解其值,將 P(x) 與 ε 比較來判斷是否為異常值,其中 P(x)

公式定義為

演算法的詳細過程如下:

舉例說明:

1.4 開發和評估異常檢測系統 Developing and evaluating an anomaly detection system

異常檢測演算法其實是屬於無監督學習演算法。但如果我們的資料是帶標籤的,我們可以把它先看成監督學習演算法。具體步驟就是先進行資料劃分,從正常資料種選擇一部分作為訓練集,然後用剩下的正常資料和異常資料分別構建交叉檢驗集和測試集

舉個例子:比如有10000個正常的飛機引擎和20個有問題的飛機引擎,首先從10000個正常的飛機引擎選取6000個作為訓練集,再組成擁有2000個正常的飛機引擎和10個有問題的飛機引擎的交叉驗證集和測試集

用訓練集訓練出模型後就可以在交叉驗證集和測試集上預測了,對於交叉驗證集,可以嘗試使用不同的 ε 值作為閾值,最後可以選出 ε ,然後對測試集進行預測,計算異常檢驗系統的F1值,或者查準率與查全率之比

1.5 異常檢測與監督學習對比 Anomaly Detection vs. Supervised Learning

在提出將有標籤的資料進行異常檢測後,就會思考我們為什麼不直接使用邏輯迴歸或者神經網路呢?

那我們就來看一看異常檢測和有監督學習之間的對比

異常檢測適用於少量正類(異常資料),大量負類,異常種類複雜,未知異常與已知異常不同的情況下,比如:詐騙檢測、生產檢測之類

監督學習適用於大量的正類、負類,未知異常與已知異常相似的情況下,比如:腫瘤分類、郵件過濾等

1.6 選擇特徵 Choosing what features to use

特徵的選擇對異常檢測演算法來說是十分關鍵的,如果特徵不符合高斯分佈,建議將資料轉換成高斯分佈,比如 :使用對數函式 x = log(x + c) (其中c為非負常數或者 x = xc ,c為 0-1 之間的一個分數)

在異常檢測過程中,也可能遇到一些異常的資料是與正常資料難以分開的,可以使用誤差分析幫我們分析是否存在問題,也可以增加一些新的特徵,增加新特徵後的新演算法能夠更好地進行異常檢測

例如,在檢測計算機狀況的例子中,可以用 CPU負載與網路通訊量的比例作為一個新的特徵,如果該值異常地大,便有可能意味著該伺服器是陷入了一些問題中

1.7 多變數高斯分佈 Multivariate Gaussian distribution

假設有兩個特徵是相關的,對於一般的高斯分佈是不太好識別異常資料的,原因在於,一般的高斯函式模型嘗試同時抓住兩個特徵的偏差,就會得到如下圖中的粉色判斷邊界,假如綠色叉是異常點,那就很難將它識別出來了

但是對於多元高斯分佈來說,它得到就是藍色判斷邊界,就可以很好的把綠色叉區分開來

在高斯分佈模型中是通過分別計算每個特徵對應的機率,將其累乘起來,得到 p(x)

而多元高斯分佈模型是通過構建特徵的協方差矩陣,使用所有的特徵一次性計算出 p(x)。計算步驟:先計算所有特徵的平均值 μ,然後再計算協方差矩陣 Σ

其中: μ 是一個向量,其每一個單元都是原特徵矩陣中一行資料的均值,|Σ|是矩陣的行列式

不同的均值 μ 和協方差矩陣 Σ 都會對模型產生影響

左1為正常影象,左2影象是 x2 特徵的偏差較小,中間影象是 x2 特徵的偏差較大,右2影象是不改變偏差,增加兩者之間的正相關性右1影象不改變偏差,增加兩者之間的負相關性

不同的均值 µ 對模型的影響

1.8 使用多元高斯分佈進行異常檢測 anomaly detection using the multivariate Gaussian distribution

使用元高斯分佈進行異常檢測的步驟:先計算出均值 µ 和協方差矩陣 Σ ,然後對新例項 x, 根據公式計算其 p(x) 的值,如果小於 ε 則異常

在一般的高斯分佈模型和多元高斯分佈模型的對比中,對於多元高斯分佈模型,如果其協方差矩陣只有正對角線上元素非零,則退化為原始高斯分佈模型

更具體的對比就是

一般的高斯分佈模型:不能捕捉特徵之間的相關性,但可以通過將特徵進行組合的方式來解決;計算代價小,可以適用於大規模的特徵

多元的高斯分佈模型:自動捕捉特徵之間的相關性;計算代價較大,適用於訓練集較小的樣本;訓練的大小 m 必須要大於特徵數量n,通常需要m ≥ 10n,否則會導致協方差矩陣不可逆

模型選擇:

如果特徵之間在某種程度上相互關聯,可以通過構造新特徵的方法來捕捉這些相關性,可以使用原高斯分佈模型
如果訓練集不是太大,並且沒有太多的特徵,可以使用多元高斯分佈模型