網盛創新研究院 - AI、區塊鏈、云計算、大數據技術的研究與應用交流平臺!

網盛創新研究院/百科/正文

基于PCA的異常檢測

相關新聞/

Related Info

Principal Component Analysis(PCA)是最常見的數據降維的方法。

PCA的相關概念

我們先簡單回顧一下 PCA的相關概念。假設原始數據是一個 mtimes{n} 的矩陣,這里m表示數據樣本的數量,n表示每一條數據樣本的特征數目。一般的,我們先要對原始數據做一些預處理:


1. 中心化:將原始數據每一列進行零均值化,即將該列上的每一個數值都減去該列的均值。

2. 歸一化:將中心化之后的數據的每一列進行方差歸一化,即將該列上的每一個數值都除以該列的標準差。


上面的兩步預處理是通常做法。中心化的主要目的是讓后面的公式描述更簡潔,并不影響特征值分解。歸一化是為了讓不同變量的方差變化尺度控制在相同的范圍內,消除不同量綱的影響,使得它們更有可比性。我們將預處理之后的矩陣表示為 X ,則 PCA 的主要步驟如下:


  1. 計算協方差矩陣 C=frac{1}{m-1}X^{T}X

  2. 求解協方差矩陣的特征值 lambda_{1}, lambda_{2}, ldots ,lambda_{i} 和特征向量 bf{e_{1}},bf{e_{2}},ldots, bf{e_{i}}

  3. 按照特征值從大到小的順序,將特征向量從左至右排列,將前k個特征向量組成的矩陣表示為 P_{k}

  4. X 映射到低維的k維空間( kll{n} ),則映射之后的數據 Y_{k}=XP_{k}


為了更清楚的理解步驟4里的“映射”操作,我們可以拿單個數據樣本 bf{x}  和特征向量 bf{e_j} 來舉例。根據步驟4中的公式,樣本 bf{x}  在特征向量 bf{e_j} 方向上的坐標為 bf{x^{T}}cdotbf{{e_j}} 。 回想一下關于點乘的幾何定義,我們有:


bf{x^{T}}cdotbf{{e_j}}=|bf{x^{T}}|cdot|bf{e_j}|cdotcos theta


這里 theta 為點乘的兩個向量的夾角,這里  bf{e_j}  是長度為1的單位向量,所以 bf{x^{T}}cdotbf{{e_j}}=|bf{x^{T}}|cdotcos theta ,剛好為樣本 bf{x} 在特征向量 bf{e_j}  方向上的投影(坐標)。如果把所有數據點的映射用矩陣的形式表示出來,那就是步驟4的公式了。


我們將原始數據映射到低維空間之后,也可以根據數據在低維空間里的坐標來重構原始數據。PCA的其中一種推導方式就是基于重構誤差得到的。假設數據樣本  bf{x_i}  映射到 k 維空間的坐標為  {y_1,y_2,ldots,y_k}  , 則基于該 k 維坐標重構的數據為:

{bf {x'}_{ik}} = sum_{i=1}^{k}y_i{bf e_i}

上面的重構公式比較直觀,即:重構的數據坐標為數據在低維空間每個方向上的坐標乘以該方向上的單位向量之后的求和。如果把所有數據樣本的重構用矩陣的形式表示出來,則:

{X'} = {Y_k}P_{k}^{T}

后面我們在描述PCA用于異常檢測的時候還會用到這里的重構公式。


PCA用于異常檢測

PCA在異常檢測方面的做法,大體有兩種思路:一種是將數據映射到低維特征空間,然后在特征空間不同維度上查看每個數據點跟其它數據的偏差;另外一種是將數據映射到低維特征空間,然后由低維特征空間重新映射回原空間,嘗試用低維特征重構原始數據,看重構誤差的大小。兩種思路看似不太一樣,其實本質上是差不多的。


我們先來講講第一種思路。PCA在做特征值分解之后得到的特征向量反應了原始數據方差變化程度的不同方向,特征值為數據在對應方向上的方差大小。所以,最大特征值對應的特征向量為數據方差最大的方向,最小特征值對應的特征向量為數據方差最小的方向。原始數據在不同方向上的方差變化反應了其內在特點。如果單個數據樣本跟整體數據樣本表現出的特點不太一致,比如在某些方向上跟其它數據樣本偏離較大,可能就表示該數據樣本是一個異常點。


對于某一個特征向量  bf{e_j} ,數據樣本  bf{x_i}  在該方向上的偏離程度  d_{ij}  可以用如下的公式計算:

d_{ij} = frac{(bf{x_i}^{T}cdotbf{e_j})^2}{lambda_{j}}

這里的  lambda_j  主要起歸一化的作用,這樣可以使得不同方向上的偏離程度具有可比性。在計算了數據樣本在所有方向上的偏離程度之后,為了給出一個綜合的異常得分,最自然的做法是將樣本在所有方向上的偏離程度加起來,即:

Score({bf{x_i}})=sum_{j=1}^n{d_{ij}}=sum_{j=1}^{n}frac{(bf{x_i}^{T}cdotbf{e_j})^2}{lambda_{j}}

這個公式只是計算異常得分的一種方式。也有一些算法采取了略微不同的做法,比如,有的只考慮數據在前 k 個特征向量方向上的偏差,或者只考慮后 r 個特征向量方向上的偏差,即:

sum_{j=1}^{k}d_{ij} > C_1 quad or quad sum_{j=n-r+1}^{n}d_{ij} > C_2

這里的 C_1C_2 是人為設定的兩個閾值,如果得分大于閾值則判斷為異常。


一般而言,前幾個特征向量往往直接對應原始數據里的某幾個特征,在前幾個特征向量方向上偏差比較大的數據樣本,往往就是在原始數據中那幾個特征上的極值點。而后幾個特征向量有些不同,它們通常表示某幾個原始特征的線性組合,線性組合之后的方差比較小反應了這幾個特征之間的某種關系。在后幾個特征方向上偏差比較大的數據樣本,表示它在原始數據里對應的那幾個特征上出現了與預計不太一致的情況。到底是考慮全部特征方向上的偏差,前幾個特征向量上的偏差,還是后幾個特征向量上的偏差,在具體使用時可以根據具體數據靈活處理。


前面提到,PCA用于異常檢測時候,還有一種思路是基于重構誤差的。直觀上理解,PCA提取了數據的主要特征,如果一個數據樣本不容易被重構出來,表示這個數據樣本的特征跟整體數據樣本的特征不一致,那么它顯然就是一個異常的樣本。對于數據樣本 bf{x_i} ,  假設其基于 k 維特征向量重構的樣本為  bf{x'_{ik}} , 則該數據樣本的異常得分可以用如下的公式計算:

Score(x_i) = sum_{k=1}^{n}(|{bf x_i} -{bf x'_{ik}}|)times{ev(k)}

ev(k)=frac{sum_{j=1}^{k}lambda_{j}}{sum_{j=1}^{n}lambda_j}

上面的公式考慮了重構使用的特征向量的個數 k 的影響,將 k 的所有可能做了一個加權求和,得出了一個綜合的異常得分。顯然,基于重構誤差來計算異常得分的公式也不是唯一的,這里只是其中的一種做法。


根據前面一節提到的重構公式,我們在基于低維特征進行數據樣本的重構時,舍棄了較小的特征值對應的特征向量方向上的信息。換一句話說,重構誤差其實主要來自較小的特征值對應的特征向量方向上的信息。基于這個直觀的理解,PCA在異常檢測上的兩種不同思路都會特別關注較小的特征值對應的特征向量。所以,我們說PCA在做異常檢測時候的兩種思路本質上是相似的。

PCA 是一種線性的數據降維的方法,為了識別一些更為復雜的異常,最自然的做法是應用 kernel PCA。

標簽:
關于我們創新研究院大講堂服務介紹
? 生意寶(002095) 版權所有  浙公網安備 33010002000015號 工商執照 浙ICP證  網絡工商
韩国色情禁片视频床,玉女聊斋1998 免费观看,韩国禁片大全电影在线 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>