機器學習-異常檢測

一、什麼是異常檢測

異常檢測(Anomaly detection)主要用於檢測異常數據。

舉個🌰,假想你是一個飛機引擎製造商,當你生產的飛機引擎從生產線上流出時,你需要進行QA(質量控制測試),而作爲這個測試的一部分,你測量了飛機引擎的一些特徵變量,比如引擎運轉時產生的熱量,或者引擎的振動等等。這樣一來,你就有了一個數據集,從 x(1)x^{(1)}x(m)x^{(m)},如果你生產了 mm 個引擎的話,你將這些數據繪製成圖表,看起來就是這個樣子:

image-20200213204200979

這裏的每個點、每個叉,都是你的無標籤數據。這樣,異常檢測問題可以定義如下:我們假設後來有一天,你有一個新的飛機引擎從生產線上流出,而你的新飛機引擎有特徵變量 x(test)x^{(test)}。所謂的異常檢測問題就是:我們希望知道這個新的飛機引擎是否有某種異常,或者說,我們希望判斷這個引擎是否需要進一步測試。因爲,如果它看起來像一個正常的引擎,那麼我們可以直接將它運送到客戶那裏,而不需要進一步的測試。

給定數據集 {x(1),x(2),,x(m)}\{x^{(1)},x^{(2)},\ldots,x^{(m)}\},我們假使數據集是正常的,我們希望知道新的數據 x(test)x^{(test)} 是不是異常的,即這個測試數據不屬於該組數據的機率如何。我們所構建的模型應該能根據該測試數據的位置告訴我們其屬於一組數據的可能性 p(x)p(x)

image-20200213204502855

上圖中,藍色圈內的數據看上去數據正常點的概率較高,而處理藍色圈外的數據,距離越遠,屬於正常數據的概率越低。

異常檢測還可以用來識別欺詐,例如在線採集而來的有關用戶的數據,一個特徵向量中可能會包含如:用戶多久登錄一次,訪問過的頁面,在論壇發佈的帖子數量,甚至是打字速度等。嘗試根據這些特徵構建一個模型,可以用這個模型來識別那些不符合該模式的用戶。

二、異常檢測原理

2.1 高斯分佈

假設變量 xx 服從高斯分佈 N(μ,σ2)N(\mu,\sigma^2),則其概率密度函數爲
p(μ,σ2)=12πσexp((xμ)22σ2) p\left(\mu, \sigma^{2}\right)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)
密度分佈函數圖如下所示

image-20200213205234506

若數據爲 {x(1),x(2),,x(m)}\{x^{(1)},x^{(2)},\ldots,x^{(m)}\} ,則
μ=1mi=1mx(i)σ2=1mi=1m(x(i)μ)2 \begin{aligned} \mu &= \frac{1}{m} \sum_{i=1}^{m} x^{(i)} \\ \sigma^{2} &=\frac{1}{m} \sum_{i=1}^{m}\left(x^{(i)}-\mu\right)^{2} \end{aligned}

2.2 異常檢測算法

本文基於高斯分佈開發異常檢測算法,假設數據集爲 {x(1),x(2),,x(m)}\{x^{(1)},x^{(2)},\ldots,x^{(m)}\},維度爲 nn,其算法流程如下

  1. 選定可能出現異常的數據 x(i)x^{(i)}
  2. 計算參數 μ1,,μn,σ12,,σn2\mu_{1}, \dots, \mu_{n}, \sigma_{1}^{2}, \dots, \sigma_{n}^{2}
    μj=1mi=1mxj(i)σj2=1mi=1m(xj(i)μj)2(1) \begin{aligned} \mu_{j} &=\frac{1}{m} \sum_{i=1}^{m} x_{j}^{(i)} \\ \sigma_{j}^{2} &=\frac{1}{m} \sum_{i=1}^{m}\left(x_{j}^{(i)}-\mu_{j}\right)^{2} \end{aligned}\tag{1}
  3. 計算概率 p(x)p(x)
    p(x)=j=1np(xj;μj,σj2)=j=1n12πσjexp((xjμj)22σj2)(2) p(x)=\prod_{j=1}^{n} p\left(x_{j} ; \mu_{j}, \sigma_{j}^{2}\right)=\prod_{j=1}^{n} \frac{1}{\sqrt{2 \pi} \sigma_{j}} \exp \left(-\frac{\left(x_{j}-\mu_{j}\right)^{2}}{2 \sigma_{j}^{2}}\right) \tag{2}
    如果 p(x)<εp(x)<\varepsilon, 則數據異常

舉個🌰,如下圖所示

image-20200213210840139

設定 ε=0.02\varepsilon=0.02 ,數據集有兩個維度,其概率密度函數分別如上圖的右上角所示,給定測試數據,按照式 (2)(2) 計算其概率,通過比較與 ε\varepsilon 的大小確定是否異常。

三、開發異常檢測系統

3.1 異常檢測系統評估方法

異常檢測算法是一個非監督學習算法,意味着我們無法根據結果變量 yy 的值來告訴我們數據是否真的是異常的。我們需要另一種方法來幫助檢驗算法是否有效。當我們開發一個異常檢測系統時,一般情況下的數據分配如下

  • 訓練集x(1),x(2),,x(m)x^{(1)},x^{(2)},\ldots,x^{(m)}(正常數據),60%
  • 交叉驗證集 (xcv(1),ycv(1)),xcv(2),ycv(2)),,xcv(m),ycv(m))(x^{(1)}_{cv},y^{(1)}_{cv}),x^{(2)}_{cv},y^{(2)}_{cv}),\ldots,x^{(m)}_{cv},y^{(m)}_{cv}),20%
  • 測試集 (xtest(1),ytest(1)),xtest(2),ytest(2)),,xtest(m),ytest(m))(x^{(1)}_{test},y^{(1)}_{test}),x^{(2)}_{test},y^{(2)}_{test}),\ldots,x^{(m)}_{test},y^{(m)}_{test}),20%

舉個🌰,我們有10000臺正常引擎的數據,有20臺異常引擎的數據。我們這樣分配數據:

  • 6000臺正常引擎的數據作爲訓練集

  • 2000臺正常引擎和10臺異常引擎的數據作爲交叉檢驗集

  • 2000臺正常引擎和10臺異常引擎的數據作爲測試集

具體的評估算法如下

  1. 根據測試集數據,我們估計特徵的平均值和方差並構建 p(x)p(x)函數
  2. 對交叉檢驗集,我們嘗試使用不同的 εε 值作爲閥值,並預測數據是否異常,根據 F1F1 值或者精確率/召回率的比例來選擇 εε
  3. 選出 εε 後,針對測試集進行預測,計算異常檢驗系統的 F1F1 值或者精確率/召回率的比例

3.2 數據預處理

對於異常檢測算法,我們使用的特徵是至關重要的,下面談談如何選擇特徵。

異常檢測假設特徵符合高斯分佈,如果數據的分佈不是高斯分佈,那異常檢測算法怎麼工作呢?方法就是將原始數據儘可能的轉換爲高斯分佈的數據。舉個🌰,下圖中左邊是原始數據分佈,通過 log(x)\log(x) 的處理就可以轉換爲高斯分佈的數據。

image-20200213232315517

四、基於多元高斯分佈的異常檢測

4.1 多元高斯分佈

假設有特徵變量 xRnx \in \R^n ,不爲 p(x1),p(x2),,p(xn)p(x_1),p(x_2),\ldots,p(x_n) 單獨建模,而是建立一個整體的 p(x)p(x) 模型如下
p(x)=1(2π)n2Σ12exp(12(xμ)TΣ1(xμ))(3) p(x)=\frac{1}{(2 \pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)\right) \tag{3}
其中,μ\mu 爲均值,Σ\Sigma 爲協方差矩陣。

下面我們來看看協方差矩陣是如何影響模型的。

img

上圖是5個不同的模型,從左往右依次分析:

1.是一個一般的高斯分佈模型
2.通過協方差矩陣,令特徵1擁有較小的偏差,同時保持特徵2的偏差
3.通過協方差矩陣,令特徵2擁有較大的偏差,同時保持特徵1的偏差
4.通過協方差矩陣,在不改變兩個特徵的原有偏差的基礎上,增加兩者之間的正相關性
5.通過協方差矩陣,在不改變兩個特徵的原有偏差的基礎上,增加兩者之間的負相關性

多元高斯分佈模型與原高斯分佈模型的關係:

可以證明的是,原本的高斯分佈模型是多元高斯分佈模型的一個子集,即像上圖中的第1、2、3,3個例子所示,如果協方差矩陣只在對角線的單位上有非零的值時,即爲原本的高斯分佈模型。

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

4.2 多元高斯分佈異常檢測算法

和高斯分佈的類型,多元高斯分佈異常檢測算法如下

  1. 選定可能出現異常的數據 x(i)x^{(i)}
  2. 計算參數 μ,Σ\mu, \Sigma

μ=1mi=1mx(i)Σ=1mi=1m(x(i)μ)(x(i)μ)T(4) \begin{aligned}\mu&=\frac{1}{m} \sum_{i=1}^{m} x^{(i)} \\ \Sigma&=\frac{1}{m} \sum_{i=1}^{m}\left(x^{(i)}-\mu\right)\left(x^{(i)}-\mu\right)^{T}\end{aligned}\tag{4}

  1. 計算概率 p(x)p(x)

p(x)=1(2π)n2Σ12exp(12(xμ)TΣ1(xμ))(5) p(x)=\frac{1}{(2 \pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)\right)\tag{5}

如果 p(x)<εp(x)<\varepsilon, 則數據異常

五、參考

[1] Andrew.Ng 機器學習視頻

[2] https://www.jianshu.com/p/620b584c2941

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