機器學習——異常檢測
在生產生活中,由於設備的誤差或者人為操作失當,產品難免會出現錯誤。然后檢查錯誤對人來說又是一個十分瑣碎的事情。利用機器學習進行異常值檢測可以讓人類擺脫檢錯的煩惱。
檢測算法
- 1.選定容易出錯的\(n\)個特征\(\{x_1^{(i)},x_2^{(i)},\ldots,x_n^{(i)}\}\)作為變量。
- 2.計算m個樣本的平均值和方差。
\[{\mu_j} = {1 \over m}\sum\limits_{i = 1}^m {x_j^{(i)}} \]
\[{\sigma ^2} = {1 \over m}\sum\limits_{i = 1}^m {(x_j^{(i)}} - {\mu _j}{)^2} \]
- 3.給定監測點\(x\).計算\(p(x)\)
\[p(x) = \prod \limits_{j = 1}^n {p({x_j};{\mu_j},\sigma_j^2)} \]
- 4.如果\(p(x)< \epsilon\),則為異常值;反之,不是。
開發和評價一個異常檢測系統
異常檢測算法是一個非監督學習算法,意味着我們無法通過結果變量判斷我們的數據是否異常。所以我們需要另一種方法檢測算法是否有效。當我們開發一個系統時,我們從有標簽(知道是否異常)的數據入手,從中找出一部分正常數據作為訓練集,剩余的正常數據和異常數據作為交叉檢驗集和測試集。
具體評價方法如下:
- 根據測試集數據,估計出特征的平均值和方差,構建\(p(x)\)函數
- 對於交叉檢驗集,嘗試使用不同的\(\epsilon\)最為閾值,並預測數據是否異常,根據F1值或者查准率與查全率的比例來選擇\(\epsilon\)
- 選出\(\epsilon\)后,針對測試集進行預測,計算異常檢驗系統的F1值或者查准率與查全率之比
異常檢測與監督學習對比
異常檢測 | 監督學習 |
---|---|
大量的正常值(y=0)和少量的異常值(y=1) | 大量的正向類(y=0)和少量的負向類(y=1) |
異常數據太少,只能根據少量數據進行訓練 | 有足夠多的正向和負向數據以供訓練 |
舉例:1.欺詐行為檢測;2.生產廢品檢測;3.檢測機器運行狀態 | 舉例:1.郵箱過濾器;2.天氣預報;3.腫瘤分類 |
分布的處理
- 對於高斯分布的數據,直接運用以上算法就好。
- 但是對於非高斯分布的數據,雖然也可是使用上面的算法,但是效果不是很好,所以我們盡量將非高斯分布轉化成(近似)高斯分布,然后再進行處理。
- 數據整體偏小,可以求\(ln(x)\)或者\(x^a,0<a<1\)
- 數據整體偏大,可以求\(e^x\)或者\(x^a,a>1\)
誤差分析
在誤差分析中,如果我們可以發現我的選定的變量是否合適,進而進行相應的改正。如左圖所示,異常點\(x\)對應的概率很高,顯然這種分布方式不能很好地識別出異常值。所以我們嘗試增加變量或者改變變量的類型來識別異常值。如右圖所示,通過增加一個變量,我們能夠更好地識別異常點。所以,誤差分析對於一個問題來說還是很重要的。