7.4.5 魯棒主成分分析 PCA

7.4.5 魯棒主成分分析 PCA

根據每個樣本點數據 ai\mathbf{a}_{i} 在第一主方向 u1\mathbf{u}_1 上的投影的方差最大,知樣本點在此方向最分散,爲第一主方向。我們可以反過來思考,每個樣本點數據 ai\mathbf{a}_{i} 在某個方向 α\mathbf{\alpha} 上投影,計算其方差,方向不同時,方差是不同的,當方差最大時,此時方向就是第一主方向,所以第一主方向可如下定義:
u1=argmaxαaiA(aiTα)2=argmaxα(ATα)TATα==argmaxααT(AAT)α \mathbf{u}_1= argmax_{\mathbf{\alpha}} \sum_{\mathbf{a}_{i} \in A} (\mathbf{a}^T_{i}\mathbf{\alpha})^2\\ = argmax_{\mathbf{\alpha}} (A^T\mathbf{\alpha})^TA^T\mathbf{\alpha}== argmax_{\mathbf{\alpha}} \mathbf{\alpha}^T(AA^T)\mathbf{\alpha}

該定義是計算方差,需進行平方運算,在最小二乘法章節指出,平方運算很容易受到異常點的影響,比如數據矩陣 AA 中存在離羣的樣本點,即使這樣的離羣點數目很少,也會導致第一主方向極大地偏離理想方向。如果點雲不存在離羣點,即樣本點都是採樣於高斯分佈,則上述計算得到的主方向就是最優主方向。

爲了提高魯棒性即抗離羣點能力,需要減弱離羣點對方差的貢獻,採用一次函數就可達到目的,即使用絕對值,而不是平方,則第一主方向可如下定義:
u1=argmaxαaiAaiTα \mathbf{u}_1 = argmax_{\mathbf{\alpha}} \sum_{\mathbf{a}_{i} \in A} |\mathbf{a}^T_{i}\mathbf{\alpha}|

這是一種常用的魯棒PCA,原理簡單易懂,效果也較好,計算也方便。下面來求解 u1\mathbf{u}_1

J1=aiAaiTα=aiAαTai=aiA+αTaiaiAαTai=αT(aiA+aiaiAai)=2αTaiA+ai J_1 = \sum_{\mathbf{a}_{i} \in A} |\mathbf{a}^T_{i}\mathbf{\alpha}|= \sum_{\mathbf{a}_{i} \in A} |\mathbf{\alpha}^T\mathbf{a}_{i}|\\ = \sum_{\mathbf{a}_{i} \in A_+} \mathbf{\alpha}^T\mathbf{a}_{i} - \sum_{\mathbf{a}_{i} \in A_-} \mathbf{\alpha}^T\mathbf{a}_{i} \\ = \mathbf{\alpha}^T (\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i} - \sum_{\mathbf{a}_{i} \in A_-} \mathbf{a}_{i}) \\ = 2\mathbf{\alpha}^T \sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}

其中集合 A+={aiA:αTai0}A_+ = \{\mathbf{a}_{i} \in A: \mathbf{\alpha}^T\mathbf{a}_{i} \ge 0\} 即與向量 α\mathbf{\alpha} 夾角小於等於 9090 度的樣本集 和 A={aiA:αTai<0}A_- = \{\mathbf{a}_{i} \in A: \mathbf{\alpha}^T\mathbf{a}_{i} < 0\}

因爲樣本集進行了中心化,所以 aiAai=0\sum_{\mathbf{a}_{i} \in A} \mathbf{a}_{i} = \mathbf{0} ,因此 aiA+ai=aiAai\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i} = - \sum_{\mathbf{a}_{i} \in A_-} \mathbf{a}_{i}

要最大化 J1J_1 ,只需向量 α\mathbf{\alpha} 與向量 aiA+ai\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i} 平行即可,所以
α=unit(aiA+ai) \mathbf{\alpha} = unit (\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i})
即單位化向量 aiA+ai\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}

所以可以採用迭代法求解最優 u1\mathbf{u}_1 。首先隨機生成單位向量 α\mathbf{\alpha}

1、根據內積 αTai\mathbf{\alpha}^T\mathbf{a}_{i} 符號,劃分集合 A+A_+

2、令 α=unit(aiA+ai)\mathbf{\alpha} = unit (\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}) 最大化 J1J_1 ,得到新的單位向量 α\mathbf{\alpha}

重複上面兩步,直到收斂即單位向量 α\mathbf{\alpha} 改變很小,此時 u1=α\mathbf{u}_1=\mathbf{\alpha}

可計算第一主方向上方差爲 ATu12\|A^T\mathbf{u}_1\|^2 ,注意其不等於矩陣 AA 奇異值 σ1\sigma_1

那如何計算第二主方向呢?

第二主方向是垂直於第一主方向,最大方差方向即
u2=argmaxαu1aiAαTai \mathbf{u}_2 = argmax_{\mathbf{\alpha} \in \perp \mathbf{u}_1} \sum_{\mathbf{a}_{i} \in A} |\mathbf{\alpha}^T\mathbf{a}_{i}|

把每個樣本點沿第一主方向進行正交分解,即分解爲第一主方向分量 ai\mathbf{a}^\parallel_{i} 和垂直於第一主方向分量 ai\mathbf{a}^\perp_{i} ,則
ai=ai+aiai=(Eu1u1T)aiai=u1u1Tai \mathbf{a}_{i} = \mathbf{a}^\parallel_{i} + \mathbf{a}^\perp_{i} \\ \mathbf{a}^\perp_{i} = (E-\mathbf{u}_1\mathbf{u}^T_1)\mathbf{a}_{i} \\ \mathbf{a}^\parallel_{i} = \mathbf{u}_1\mathbf{u}^T_1\mathbf{a}_{i} \\


J=aiAαTai=aiA(ai+ai)(αT+αT)=aiAaiαT+aiαT J = \sum_{\mathbf{a}_{i} \in A} |\mathbf{\alpha}^T\mathbf{a}_{i}| \\ = \sum_{\mathbf{a}_{i} \in A} |(\mathbf{a}^{\parallel}_{i} + \mathbf{a}^{\perp}_{i}) (\mathbf{\alpha}^{T\parallel} + \mathbf{\alpha}^{T\perp})|\\ = \sum_{\mathbf{a}_{i} \in A} |\mathbf{a}^{\parallel}_{i}\mathbf{\alpha}^{T\parallel} + \mathbf{a}^{\perp}_{i}\mathbf{\alpha}^{T\perp}| \\

αu1\mathbf{\alpha} \in \perp \mathbf{u}_1 時,即 α=0\mathbf{\alpha}^{\parallel} = \mathbf{0}
J2=J=aiAaiαT J_2 = J = \sum_{\mathbf{a}_{i} \in A} |\mathbf{a}^{\perp}_{i}\mathbf{\alpha}^{T\perp}|

要使 J2J_2 最大化,同樣可以採用使 J1J_1 最大化的迭代法,只需保證 α\mathbf{\alpha} 始終垂直於 u1\mathbf{u}_1 ,由於 ai\mathbf{a}^{\perp}_{i} 均垂直於 u1\mathbf{u}_1 ,故 aiA+ai\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}^{\perp}_{i} 垂直於 u1\mathbf{u}_1 ,其中集合 A+={aiA:aiαT0}A_+ = \{\mathbf{a}_{i} \in A: \mathbf{a}^{\perp}_{i}\mathbf{\alpha}^T \ge 0\} 。所以只要初始化時 α\mathbf{\alpha} 垂直於 u1\mathbf{u}_1 即可,則令 α=uint((Eu1u1T)v)\mathbf{\alpha} = uint((E-\mathbf{u}_1\mathbf{u}^T_1)\mathbf{v}) 其中 v\mathbf{v} 爲單位隨機向量。

整理上面結論得到第二主方向的計算過程:

首先樣本點投影到垂直於第一主方向的子空間,即 (Eu1u1T)A(E-\mathbf{u}_1\mathbf{u}^T_1)A ,爲了簡化記號,投影后的數據矩陣還是記爲 AA ,其次隨機生成單位向量 α=uint((Eu1u1T)v)\mathbf{\alpha} = uint((E-\mathbf{u}_1\mathbf{u}^T_1)\mathbf{v}) 其中 v\mathbf{v} 爲單位隨機向量,最後最大化 J2=2αTaiA+aiJ_2 = 2\mathbf{\alpha}^T \sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i} ,此時 u2=α\mathbf{u}_2 = \mathbf{\alpha}

可計算第二主方向上方差爲 ATu22\|A^T\mathbf{u}_2\|^2 ,注意其不等於矩陣 AA 奇異值 σ2\sigma_2

k+1k+1 個主方向的計算過程如下:

首先樣本點投影到垂直於前 kk 個主方向的子空間,即 Ak+1=(EukukT)AkA_{k+1} = (E-\mathbf{u}_k\mathbf{u}^T_k)A_k ,其中 A0=AA_0 = A 爲原數據矩陣,u0=0\mathbf{u}_0 = \mathbf{0} 爲零向量。爲了簡化記號,投影后的數據矩陣還是記爲 A=Ak+1A=A_{k+1} ,其次隨機生成單位向量 α=uint((E(u1u1T++ukukT))v)\mathbf{\alpha} = uint((E-(\mathbf{u}_1\mathbf{u}^T_1+\cdots+\mathbf{u}_k\mathbf{u}^T_k))\mathbf{v}) 其中 v\mathbf{v} 爲單位隨機向量,最後最大化 Jk+1=2αTaiA+aiJ_{k+1} = 2\mathbf{\alpha}^T \sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i} ,此時 uk+1=α\mathbf{u}_{k+1} = \mathbf{\alpha}

據此可以獲得全部主方向 u1,,ur\mathbf{u}_1,\cdots,\mathbf{u}_r ,取前 kk 個作爲最後的主方向。

數據矩陣重構如果採用經典PCA重構方法,由於主方向計算方法不同,即使採用全部主方向,也不能使重構殘差爲零。

異常點檢測

點雲位於 mm 維空間的 kk 維子空間,在該子空間中可被超橢球緊緻包圍,位於該橢球內的點認爲是正常點,橢球外的點是異常點,越是遠離橢球,異常度越大。據此提出兩個定量指標衡量異常程度,一個是顯而易見的,異常點位於 kk 維子空間外,其與 kk 維子空間的垂直距離爲 OD,距離越大,則越異常,樣本點 ai\mathbf{a}_{i} 的垂直距離 ODiOD_i
ODi=(Ej=1kujujT)ai OD_i = \|(E-\sum^k_{j=1} \mathbf{u}_j\mathbf{u}^T_j)\mathbf{a}_{i}\|

異常點雖然位於 kk 維子空間,但遠離橢球中心,即異常點投影值 ujTai\mathbf{u}^T_j\mathbf{a}_{i} 很大,對每個投影值用該主方向上方差的平方根 σj\sigma_j 歸一化,得到投影距離 PD,距離越大,則越異常,樣本點 ai\mathbf{a}_{i} 的投影距離 PDiPD_i

PDi=j=1k(ujTai/σj)2 PD_i = \sqrt{\sum^k_{j=1}(\mathbf{u}^T_j\mathbf{a}_{i}/\sigma_j)^2}

以三維作爲例子直觀說明異常點,假設正常點雲位於平面上橢圓內,則該平面內遠離橢圓的點投影距離 PD 大;該平面外的點距離該平面的距離爲垂直距離 OD,距離越大,則越異常。

根據垂直距離和投影距離,可以把樣本點分爲四類:
1、正常樣本點:兩個距離都小,在正常範圍內;
2、好槓桿點:投影距離大,垂直距離正常;
3、壞槓桿點:投影距離大,垂直距離大;
4、垂直外點:投影距離正常,垂直距離大。
後面三種都是異常點。

這樣可以獲得診斷圖,橫座標爲投影距離,縱座標爲垂直距離,繪製每個樣本點。聚集在原點附近的點爲正常點,遠離原點的點爲異常點。

當存在特別離羣的點或離羣點比例較高時,此時可以先去除這些離羣點,然後利用剩下的正常點進行常規PCA,可以獲得更好的結果。利用此時的主方向和奇異值,重新繪製診斷圖。

上面介紹的僅是衆多魯棒主成分方法的一種,魯棒主成分方法的核心是獲得方差 u1=argmaxαaiA(αTai)2\mathbf{u}_1 = argmax_{\mathbf{\alpha}} \sum_{\mathbf{a}_{i} \in A} (\mathbf{\alpha}^T\mathbf{a}_{i})^2 的魯棒估計,採用絕對值只是一種比較直觀的方法。

採用中值估計方差是一個更魯棒的方法,但尋求最優解很困難。令投影爲 zi=αTaiz_i = \mathbf{\alpha}^T\mathbf{a}_{i} ,則基於中值的方差估計公式爲

S=1.483med(ziz) S = 1.483 med(|z_i - z^*|)

其中 zz^* 是投影 ziz_i 的中值,係數 1.483 是爲了使方差估計值與高斯分佈一致,SS 爲方差的平方根,稱爲標準差。具體如何獲得最優解,由於很複雜,不打算展開。

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