machine learning 之 Anomaly detection

自Andrew Ng的machine learning課程。算法

 

目錄:函數

  • Problem Motivation
  • Gaussian Distribution
  • Algorithm
  • Developing and Evaluating an Anomaly Detection System
  • Anomaly Detection vs. Supervised Learning
  • Choosing What Features to Use
  • Multivariate Gaussian Distribution
  • Anomaly Detection using the Multivariate Gaussian Distribution 

 

一、Problem Motivation

如同以往的學習問題,咱們給定數據集$x^{(1)}, x^{(2)},...,x^{(m)}$性能

給定一個新的實例,$x_{test}$,咱們想知道這個新的實例是不是異常點(abnormal / anomalous)學習

以下例中,給定飛機發動機的一些特徵數據集,如$x_1:heat \ generated, x_2:vibration \ intensity$等,給定一個數據集中未出現過的新的實例$x_{test}$,那麼這個新的實例是不是異常點(真實狀況中不可能出現具備這樣子特徵的飛機發動機就稱其爲異常點);測試

如圖中,屬於一堆紅叉叉中間的綠叉叉就是正常的(ok)飛機發動機,而距離較遠的綠叉叉則是異常的(anomaly)飛機發動機。lua

爲了監測異常點,咱們能夠定義一個模型「p(x)」,這個模型用來計算實例不是異常點的機率,而後,咱們選擇一個閾值$\varepsilon$做爲是否爲異常點的分割線,當機率小於這個值,那麼就認爲這個實例是異常點,不然非異常點。spa

以下圖所示,藍色圈圈之外的就是異常點,選擇不一樣的$\varepsilon$圈子的大小會不同:調試

舉一些anomaly detection的實例:orm

  • fraud detection(詐騙監測)
    • 讓$x^{(i)}$做爲用戶活動的特徵(the features of user's activities)
    • 從數據中構建模型p(x)
    • 經過肯定$p(x)<\varepsilon$,來找到異經常使用戶
  • manufacturing(製造業,如飛機發動機)
  • 在數據中心監測電腦
    • $x^{(i)}爲電腦的特徵,如x^{(1)}:內存使用,x^{(2)}:可獲取的磁盤數目,x^{(3)}:CPU \ load......$

注:若異常監測器標記了太多的異常點,那麼能夠適當的將$\varepsilon$減少。blog

 

二、Gaussian Distribution

又稱爲Normal distribution,如圖,若數據的分佈知足如下的圖像,則說x是知足均值爲$\mu$,方差爲$\sigma^2$的高斯分佈,完整的函數是$p(x;\mu,\sigma^2)=\frac{1}{\sigma \sqrt{(2\pi)}}e^{-\frac{1}{2} {(\frac{x-\mu}{\sigma})}^2}$

如下是高斯分佈的幾張示例圖:

從以上解釋和圖例中咱們能夠知道決定高斯分佈的參數是均值和方差:

  • 均值決定高斯分佈中曲線的中心位置
  • 方差決定高斯分佈中曲線的形狀和寬度

那麼給定一個數據集,咱們如何獲得這兩個參數呢?

  • $\mu = \frac{1}{m} \sum_{i=1}^{m}{x^{(i)}}$
  • $\sigma^2=\frac{1}{m} \sum_{i=1}^{m}{(x_{(i)}-\mu)}^2$

 

三、Algorithm

給定訓練集${x^{(1)},x^{(2)},...,x^{(m)}}$,這其中的每一個實例都是一個向量,$x \in R^n$。(m表明訓練集的實例的數目,n表明特徵的數目)

$p(x)=p(x_1;\mu_1,\sigma_1^2)p(x_2;\mu_2,\sigma_2^2)...p(x_n;\mu_n,\sigma_n^2)=\prod_{j=1}^{n}p(x_j;\mu_j,\sigma_j^2)$

以上函數公式基於一個獨立性假設,有興趣的能夠本身去查一查。

異常值監測算法:

  1. 選擇能夠捕捉異常值的特徵$x_{(i)}$
  2. 擬合參數$\mu_1,\mu_2,...,\mu_n,\sigma_1^2,\sigma_2^2,...,\sigma_n^2$
    • $\mu_j=\frac{1}{m}\sum_{i=1}^{m}{x_{j}^{(i)}}$
    • $\sigma_j^2=\frac{1}{m}\sum_{i=1}^{m}{(x_{j}^{(i)}-\mu_j)}^2$

  3. 給定新實例x,計算p(x):

    $p(x)=\prod_{j=1}^{n}{p(x_j;\mu_j,\sigma_j^2)}$,若$p(x)<\varepsilon$則新實例爲異常點

 

如下是一個示例,示例中給出了$p(x_1)和p(x_2)$,藍色圈圈外面的都被定義爲異常點;

 

四、Developing and Evaluating an Anomaly Detection System

當要調試算法時(選擇特徵),若是此時有一個評價算法的方式,那咱們對如何改進算法會有一個方向。(好比加入某個特徵以後,算法變得更好了,那麼怎樣才叫算法變得更好了呢?)

相似與監督分類,咱們把數據分爲訓練集、驗證集和測試集,可是注意異常檢測算法做用的數據集中一般只有少許的異常數據,大部分的數據都是正常的數據,所以咱們的數據集劃分和監督分類是有些不一樣,例如對於一個只包含0.2%的異常數據的數據集,咱們能夠用如下方式劃分數據集:

  • 選擇大部分的數據做爲訓練數據集,其中只有非異常數據,不含異常數據(如60%的數據,所有爲非異常數據);
  • 選擇20%的數據做爲驗證數據集,其中包含0.1%的異常數據;
  • 選擇剩餘的20%做爲測試數據集,其中包含總數據集中0.1%的異常數據;

也就是60/20/20的比例劃分總數據集爲訓練、驗證和測試數據集,而異常數據又以50/50分配到了驗證和測試數據集中。

也有人將驗證數據集和測試數據集做爲同一個數據集,這樣的作法不推薦。

 

以上只是解決了用哪一部分的數據進行評價,可是如何評價呢?

顯然,這屬於以前說過的skewed class,也就是說異常數據佔據的比例極小,好比只有0.2%,若是簡單的是用分類精度這樣的指標,那麼只要把全部的數據都認爲是非異常,就能夠獲得98%的精度,這樣作固然不對。

同前面說過的,咱們可使用如下指標做爲評價指標:

  • true positive, false positive, true negative, false negative
  • Precision / Recall
  • F1 score

注意到能夠用驗證集選擇適當的$\varepsilon$。

 

 

五、Anomaly Detection vs. Supervised Learning

考慮一個問題,根據以上的解說,其實異常監測算法的作法和監督分類的作法十分的類似,那麼爲何不直接用監督分類呢,好比logistic regression?

這兩個算法的不一樣在於,異常監測是針對非異常數據的建模,模型創建時不考慮異常數據,而監督分類是對正例和負例分別建模,同時考慮了兩個類別。

這裏列出了二者的不一樣:

Anomaly Detection  Supervised Learning
異常數據很是少(常見數目爲0-20),具備大量的非異常數據 正例和負例數據都不少
異常的種類是很是多的,各類各樣形式的異常,可是咱們的異常數據很是少,因此沒辦法捕捉全部的異常狀況,常常可能出現的狀況是,出現了訓練集中沒有出現過的新的異常類別,那麼若是想經過對異常數據建模,則可能會漏掉對不少異常數據的識別。 有大量的正例數據,能夠捕捉不一樣形式的正例,因此能夠直接對正例或者負例進行建模,均可以獲得比較好出結果。將來可能出現的正例或者負例的形式基本上應該都在訓練集中出現過。
詐騙監測,手工業,檢測電腦情況 垃圾郵件分類,天氣預報,癌症分類

 

 

六、Choosing What Features to Use

特徵的選擇會很是大的程度上影響異常監測器的性能。

經過畫出數據的直方圖能夠監測數據是不是符合高斯分佈的,對於不符合高斯分佈的數據,能夠經過進行一些轉換使數據更加接近高斯分佈,如$log(x), log(x+c), x^{\frac12}, x^{\frac13}$等。

 

異常監測的偏差分析:

咱們但願模型可使得異常值的p(x)很是的小,而非異常值的p(x)較大,可是發生的狀況每每以下左圖所示,異常值(藍色叉叉)和非異常值(紅色叉叉)計算出來的p(x)差很少大,這樣就沒有辦法找出異常值了

而當咱們增長一個特徵$x_2$時,見上右圖,異常值(藍色叉叉)就被明顯的分離出來了,所以找到能夠顯著區分異常點和非異常點的特徵是很重要的。 

 

七、Multivariate Gaussian Distribution

多元高斯分佈是異常監測的延伸狀況,可能會(也可能不會)捕捉到更多的異常。

以前的模型是對每個特徵都構建一個模型$p(x_1),p(x_2),....,p(x_n)$,利用多元高斯分佈能夠對全部的特徵構建一個模型$p(x_1,x_2,...,x_n)$,模型的參數$\mu \in R^{n}, \Sigma \in R^{n*n}$

$p(x;\mu, \Sigma)=\frac{1}{(2\pi)^{n/2}\,|\Sigma|^{1/2}}\,exp{(-1/2(x-\mu)\Sigma^{-1}(x-\mu))}$

這個模型的好處是它能夠擬合橢圓高斯輪廓,不只僅限於正圓

  • $\Sigma$:能夠控制橢圓的形狀、寬度和角度
  • $\mu$:能夠控制橢圓的中心位置

 

以下面一系列圖所示:

  • 當$\Sigma$是對角矩陣(除對角線上元素所有爲0),且對角線上的元素是同樣的大小時,圖像是正圓,對角線上的元素的大小控制了圓的半徑的大小,對角線上的元素越大,圓的半徑越大;
  • 當$\Sigma$是對角矩陣(除對角線上元素所有爲0),但對角線上的元素大小不同時,圖像是沿着軸線方向的橢圓,軸線上的元素的大小決定了軸線上的直徑的長度;

  • 當$\Sigma$不是對角矩陣時,斜對角(東北-西南向)的數表明圓旋轉的角度,整數表明順時針旋轉,負數表明逆時針旋轉;

 

 

八、Anomaly Detection using the Multivariate Gaussian Distribution 

 對於多元正態分佈,當參數肯定時,模型以下:

$p(x;\mu, \Sigma)=\frac{1}{(2\pi)^{n/2}\, |\Sigma|^{1/2}}\,exp{(-1/2(x-\mu)\Sigma^{-1}(x-\mu))}$

參數擬合:給定數據集${x^(1),...,x^(n)}$

  • $\mu=\frac{1}{m}\sum_{i=1}^{m}{x^{(i)}}$
  • $\Sigma=\frac{1}{m}\sum_{i=1}^{m}{(x^{(i)}-\mu)}{(x^{(i)}-\mu)}^T$

用多元正態分佈作異常監測的算法:

  1. 根據給定的數據擬合模型p(x),主要是利用上式肯定$\mu$和$\Sigma$;
  2. 給定一個新的實例,計算p(x),若$p(x)<\varepsilon$,則認爲是異常值;

那麼使用多元正態分佈的異常檢測算法和傳統的異常監測算法有什麼區別呢?

original model multivariate gaussian

$p(x_1)$*p(x_2)*...*p(x_n)

至關於在多元高斯模型中$\Sigma$是一個對角矩陣,圖像是沿着軸線方向的圓

$p(x;\mu, \Sigma)=\frac{1}{(2\pi)^{n/2}\, |\Sigma|^{1/2}}\,exp{(-1/2(x-\mu)\Sigma^{-1}(x-\mu))}$

須要手動的捕捉那些能使得異常值的機率顯著不一樣的特徵之間的組合,

如$x_3=\frac{x_1}{x_2}$

能夠自動捕捉不一樣的特徵之間的聯繫
計算的耗費更低,更適用於大型的數據,好比n=100,000

計算的耗費相對更大,由於這裏有個$\Sigma$須要求逆,且只有當m>n時$\Sigma$才能夠求逆

經驗性的會在m>10n時才用這個方法

相關文章
相關標籤/搜索