1. 程式人生 > >異常點檢測演算法(一)概率統計

異常點檢測演算法(一)概率統計

異常點檢測(又稱為離群點檢測)是找出其行為很不同於預期物件的一個檢測過程。這些物件被稱為異常點或者離群點。異常點檢測在很多實際的生產生活中都有著具體的應用,比如信用卡欺詐,工業損毀檢測,影象檢測等。

異常點(outlier)是一個數據物件,它明顯不同於其他的資料物件,就好像它是被不同的機制產生的一樣。例如下圖紅色的點,就明顯區別於藍色的點。相對於藍色的點而言,紅色的點就是異常點。

outlier

一般來說,進行異常點檢測的方法有很多,最常見的就是基於統計學的方法。

(一)基於正態分佈的一元離群點檢測方法

假設有 n 個點 (x_{1},...,x_{n}),那麼可以計算出這 n 個點的均值\mu 和方差\sigma。均值和方差分別被定義為:

\mu=\sum_{i=1}^{n}x_{i}/n,

\sigma^{2}=\sum_{i=1}^{n}(x_{i}-\mu)^{2}/n.

在正態分佈的假設下,區域 \mu\pm 3\sigma

包含了99.7% 的資料,如果某個值距離分佈的均值\mu 超過了3\sigma,那麼這個值就可以被簡單的標記為一個異常點(outlier)。

(二)多元離群點的檢測方法

涉及兩個或者兩個以上變數的資料稱為多元資料,很多一元離群點的檢測方法都可以擴充套件到高維空間中,從而處理多元資料。

(1)基於一元正態分佈的離群點檢測方法

假設 n 維的資料集合形如 \vec{x}_{i}=(x_{i,1},...,x_{i,n}), i\in \{1,...,m\},那麼可以計算每個維度的均值和方差\mu_{j},\sigma_{j}, j\in\{1,...,n\}. 具體來說,對於j\in \{1,...,n\},可以計算

\mu_{j}=\sum_{i=1}^{m}x_{i,j}/m

\sigma_{j}^{2}=\sum_{i=1}^{m}(x_{i,j}-\mu_{j})^{2}/m

在正態分佈的假設下,如果有一個新的資料 \vec{x},可以計算概率p(\vec{x}) 如下:

p(\vec{x})=\prod_{j=1}^{n} p(x_{j};\mu_{j},\sigma_{j}^{2})=\prod_{j=1}^{n}\frac{1}{\sqrt{2\pi}\sigma_{j}}\exp(-\frac{(x_{j}-\mu_{j})^{2}}{2\sigma_{j}^{2}})

根據概率值的大小就可以判斷 x 是否屬於異常值。運用該方法檢測到的異常點如圖,紅色標記為異常點,藍色表示原始的資料點。

Gauss

(2)多元高斯分佈的異常點檢測

假設 n 維的資料集合 \vec{x}=(x_{1},...,x_{n}),,可以計算 n 維的均值向量

\vec{\mu}=(E(x_{1}),...,E(x_{n}))

n\times n 的協方差矩陣:

\Sigma=[Cov(x_{i},x_{j})], i,j \in \{1,...,n\}

如果有一個新的資料 \vec{x},可以計算

p(\vec{x})=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp(-\frac{1}{2}(\vec{x}-\vec{\mu})^{T}\Sigma^{-1}(\vec{x}-\vec{\mu}))

根據概率值的大小就可以判斷 \vec{x} 是否屬於異常值。

(3)使用 Mahalanobis 距離檢測多元離群點

對於一個多維的資料集合 D,假設 \overline{a} 是均值向量,那麼對於資料集 D 中的其他物件a,從a\overline{a} 的 Mahalanobis 距離是

MDist(a,\overline{a})=\sqrt{(a-\overline{a})^{T}S^{-1}(a-\overline{a})},

其中 S 是協方差矩陣。

在這裡,MDist(a,\overline{a}) 是數值,可以對這個數值進行排序,如果數值過大,那麼就可以認為點a 是離群點。或者對一元實數集合\{MDist(a,\overline{a})|a\in D\} 進行離群點檢測,如果MDist(a,\overline{a}) 被檢測為異常點,那麼就認為a 在多維的資料集合 D 中就是離群點。

運用 Mahalanobis 距離方法檢測到的異常點如圖,紅色標記為異常點,藍色表示原始的資料點。

Mahalanobis

(4)使用 \chi^{2} 統計量檢測多元離群點

在正態分佈的假設下,\chi^{2} 統計量可以用來檢測多元離群點。對於某個物件\bold{a}\chi^{2} 統計量是

\chi^{2}=\sum_{i=1}^{n}(a_{i}-E_{i})^{2}/E_{i}.

其中,a_{i}\bold{a} 在第 i 維上的取值,E_{i} 是所有物件在第 i 維的均值,n 是維度。如果物件 \bold{a}\chi^{2} 統計量很大,那麼該物件就可以認為是離群點。

運用 \chi^{2} 統計量檢測到的異常點如圖,紅色標記為異常點,藍色表示原始的資料點。

ChiSquare

原文地址:https://zr9558.com/2016/06/13/outlierdetectionone/