7.4.5 鲁棒主成分分析 PCA
7.4.5 魯棒主成分分析 PCA
根據每個樣本點數據 ai\mathbf{a}_{i}ai? 在第一主方向 u1\mathbf{u}_1u1? 上的投影的方差最大,知樣本點在此方向最分散,為第一主方向。我們可以反過來思考,每個樣本點數據 ai\mathbf{a}_{i}ai? 在某個方向 α\mathbf{\alpha}α 上投影,計算其方差,方向不同時,方差是不同的,當方差最大時,此時方向就是第一主方向,所以第一主方向可如下定義:
u1=argmaxα∑ai∈A(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} u1?=argmaxα?ai?∈A∑?(aiT?α)2=argmaxα?(ATα)TATα==argmaxα?αT(AAT)α
該定義是計算方差,需進行平方運算,在最小二乘法章節指出,平方運算很容易受到異常點的影響,比如數據矩陣 AAA 中存在離群的樣本點,即使這樣的離群點數目很少,也會導致第一主方向極大地偏離理想方向。如果點云不存在離群點,即樣本點都是采樣于高斯分布,則上述計算得到的主方向就是最優主方向。
為了提高魯棒性即抗離群點能力,需要減弱離群點對方差的貢獻,采用一次函數就可達到目的,即使用絕對值,而不是平方,則第一主方向可如下定義:
u1=argmaxα∑ai∈A∣aiTα∣\mathbf{u}_1 = argmax_{\mathbf{\alpha}} \sum_{\mathbf{a}_{i} \in A} |\mathbf{a}^T_{i}\mathbf{\alpha}| u1?=argmaxα?ai?∈A∑?∣aiT?α∣
這是一種常用的魯棒PCA,原理簡單易懂,效果也較好,計算也方便。下面來求解 u1\mathbf{u}_1u1? 。
J1=∑ai∈A∣aiTα∣=∑ai∈A∣αTai∣=∑ai∈A+αTai?∑ai∈A?αTai=αT(∑ai∈A+ai?∑ai∈A?ai)=2αT∑ai∈A+aiJ_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} J1?=ai?∈A∑?∣aiT?α∣=ai?∈A∑?∣αTai?∣=ai?∈A+?∑?αTai??ai?∈A??∑?αTai?=αT(ai?∈A+?∑?ai??ai?∈A??∑?ai?)=2αTai?∈A+?∑?ai?
其中集合 A+={ai∈A:αTai≥0}A_+ = \{\mathbf{a}_{i} \in A: \mathbf{\alpha}^T\mathbf{a}_{i} \ge 0\}A+?={ai?∈A:αTai?≥0} 即與向量 α\mathbf{\alpha}α 夾角小于等于 909090 度的樣本集 和 A?={ai∈A:αTai<0}A_- = \{\mathbf{a}_{i} \in A: \mathbf{\alpha}^T\mathbf{a}_{i} < 0\}A??={ai?∈A:αTai?<0} 。
因為樣本集進行了中心化,所以 ∑ai∈Aai=0\sum_{\mathbf{a}_{i} \in A} \mathbf{a}_{i} = \mathbf{0}∑ai?∈A?ai?=0 ,因此 ∑ai∈A+ai=?∑ai∈A?ai\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i} = - \sum_{\mathbf{a}_{i} \in A_-} \mathbf{a}_{i}∑ai?∈A+??ai?=?∑ai?∈A???ai? 。
要最大化 J1J_1J1? ,只需向量 α\mathbf{\alpha}α 與向量 ∑ai∈A+ai\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}∑ai?∈A+??ai? 平行即可,所以
α=unit(∑ai∈A+ai)\mathbf{\alpha} = unit (\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}) α=unit(ai?∈A+?∑?ai?)
即單位化向量 ∑ai∈A+ai\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}∑ai?∈A+??ai? 。
所以可以采用迭代法求解最優 u1\mathbf{u}_1u1? 。首先隨機生成單位向量 α\mathbf{\alpha}α 。
1、根據內積 αTai\mathbf{\alpha}^T\mathbf{a}_{i}αTai? 符號,劃分集合 A+A_+A+? ;
2、令 α=unit(∑ai∈A+ai)\mathbf{\alpha} = unit (\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i})α=unit(∑ai?∈A+??ai?) 最大化 J1J_1J1? ,得到新的單位向量 α\mathbf{\alpha}α。
重復上面兩步,直到收斂即單位向量 α\mathbf{\alpha}α 改變很小,此時 u1=α\mathbf{u}_1=\mathbf{\alpha}u1?=α 。
可計算第一主方向上方差為 ∥ATu1∥2\|A^T\mathbf{u}_1\|^2∥ATu1?∥2 ,注意其不等于矩陣 AAA 奇異值 σ1\sigma_1σ1? 。
那如何計算第二主方向呢?
第二主方向是垂直于第一主方向,最大方差方向即
u2=argmaxα∈⊥u1∑ai∈A∣αTai∣\mathbf{u}_2 = argmax_{\mathbf{\alpha} \in \perp \mathbf{u}_1} \sum_{\mathbf{a}_{i} \in A} |\mathbf{\alpha}^T\mathbf{a}_{i}| u2?=argmaxα∈⊥u1??ai?∈A∑?∣αTai?∣
把每個樣本點沿第一主方向進行正交分解,即分解為第一主方向分量 ai∥\mathbf{a}^\parallel_{i}ai∥? 和垂直于第一主方向分量 ai⊥\mathbf{a}^\perp_{i}ai⊥? ,則
ai=ai∥+ai⊥ai⊥=(E?u1u1T)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} \\ ai?=ai∥?+ai⊥?ai⊥?=(E?u1?u1T?)ai?ai∥?=u1?u1T?ai?
令
J=∑ai∈A∣αTai∣=∑ai∈A∣(ai∥+ai⊥)(αT∥+αT⊥)∣=∑ai∈A∣ai∥α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}| \\ J=ai?∈A∑?∣αTai?∣=ai?∈A∑?∣(ai∥?+ai⊥?)(αT∥+αT⊥)∣=ai?∈A∑?∣ai∥?αT∥+ai⊥?αT⊥∣
當 α∈⊥u1\mathbf{\alpha} \in \perp \mathbf{u}_1α∈⊥u1? 時,即 α∥=0\mathbf{\alpha}^{\parallel} = \mathbf{0}α∥=0 ,
J2=J=∑ai∈A∣ai⊥αT⊥∣J_2 = J = \sum_{\mathbf{a}_{i} \in A} |\mathbf{a}^{\perp}_{i}\mathbf{\alpha}^{T\perp}| J2?=J=ai?∈A∑?∣ai⊥?αT⊥∣
要使 J2J_2J2? 最大化,同樣可以采用使 J1J_1J1? 最大化的迭代法,只需保證 α\mathbf{\alpha}α 始終垂直于 u1\mathbf{u}_1u1? ,由于 ai⊥\mathbf{a}^{\perp}_{i}ai⊥? 均垂直于 u1\mathbf{u}_1u1? ,故 ∑ai∈A+ai⊥\sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}^{\perp}_{i}∑ai?∈A+??ai⊥? 垂直于 u1\mathbf{u}_1u1? ,其中集合 A+={ai∈A:ai⊥αT≥0}A_+ = \{\mathbf{a}_{i} \in A: \mathbf{a}^{\perp}_{i}\mathbf{\alpha}^T \ge 0\}A+?={ai?∈A:ai⊥?αT≥0} 。所以只要初始化時 α\mathbf{\alpha}α 垂直于 u1\mathbf{u}_1u1? 即可,則令 α=uint((E?u1u1T)v)\mathbf{\alpha} = uint((E-\mathbf{u}_1\mathbf{u}^T_1)\mathbf{v})α=uint((E?u1?u1T?)v) 其中 v\mathbf{v}v 為單位隨機向量。
整理上面結論得到第二主方向的計算過程:
首先樣本點投影到垂直于第一主方向的子空間,即 (E?u1u1T)A(E-\mathbf{u}_1\mathbf{u}^T_1)A(E?u1?u1T?)A ,為了簡化記號,投影后的數據矩陣還是記為 AAA ,其次隨機生成單位向量 α=uint((E?u1u1T)v)\mathbf{\alpha} = uint((E-\mathbf{u}_1\mathbf{u}^T_1)\mathbf{v})α=uint((E?u1?u1T?)v) 其中 v\mathbf{v}v 為單位隨機向量,最后最大化 J2=2αT∑ai∈A+aiJ_2 = 2\mathbf{\alpha}^T \sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}J2?=2αT∑ai?∈A+??ai? ,此時 u2=α\mathbf{u}_2 = \mathbf{\alpha}u2?=α 。
可計算第二主方向上方差為 ∥ATu2∥2\|A^T\mathbf{u}_2\|^2∥ATu2?∥2 ,注意其不等于矩陣 AAA 奇異值 σ2\sigma_2σ2? 。
第 k+1k+1k+1 個主方向的計算過程如下:
首先樣本點投影到垂直于前 kkk 個主方向的子空間,即 Ak+1=(E?ukukT)AkA_{k+1} = (E-\mathbf{u}_k\mathbf{u}^T_k)A_kAk+1?=(E?uk?ukT?)Ak? ,其中 A0=AA_0 = AA0?=A 為原數據矩陣,u0=0\mathbf{u}_0 = \mathbf{0}u0?=0 為零向量。為了簡化記號,投影后的數據矩陣還是記為 A=Ak+1A=A_{k+1}A=Ak+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})α=uint((E?(u1?u1T?+?+uk?ukT?))v) 其中 v\mathbf{v}v 為單位隨機向量,最后最大化 Jk+1=2αT∑ai∈A+aiJ_{k+1} = 2\mathbf{\alpha}^T \sum_{\mathbf{a}_{i} \in A_+} \mathbf{a}_{i}Jk+1?=2αT∑ai?∈A+??ai? ,此時 uk+1=α\mathbf{u}_{k+1} = \mathbf{\alpha}uk+1?=α 。
據此可以獲得全部主方向 u1,?,ur\mathbf{u}_1,\cdots,\mathbf{u}_ru1?,?,ur? ,取前 kkk 個作為最后的主方向。
數據矩陣重構如果采用經典PCA重構方法,由于主方向計算方法不同,即使采用全部主方向,也不能使重構殘差為零。
異常點檢測
點云位于 mmm 維空間的 kkk 維子空間,在該子空間中可被超橢球緊致包圍,位于該橢球內的點認為是正常點,橢球外的點是異常點,越是遠離橢球,異常度越大。據此提出兩個定量指標衡量異常程度,一個是顯而易見的,異常點位于 kkk 維子空間外,其與 kkk 維子空間的垂直距離為 OD,距離越大,則越異常,樣本點 ai\mathbf{a}_{i}ai? 的垂直距離 ODiOD_iODi? 為
ODi=∥(E?∑j=1kujujT)ai∥OD_i = \|(E-\sum^k_{j=1} \mathbf{u}_j\mathbf{u}^T_j)\mathbf{a}_{i}\| ODi?=∥(E?j=1∑k?uj?ujT?)ai?∥
異常點雖然位于 kkk 維子空間,但遠離橢球中心,即異常點投影值 ujTai\mathbf{u}^T_j\mathbf{a}_{i}ujT?ai? 很大,對每個投影值用該主方向上方差的平方根 σj\sigma_jσj? 歸一化,得到投影距離 PD,距離越大,則越異常,樣本點 ai\mathbf{a}_{i}ai? 的投影距離 PDiPD_iPDi? 為
PDi=∑j=1k(ujTai/σj)2PD_i = \sqrt{\sum^k_{j=1}(\mathbf{u}^T_j\mathbf{a}_{i}/\sigma_j)^2} PDi?=j=1∑k?(ujT?ai?/σj?)2?
以三維作為例子直觀說明異常點,假設正常點云位于平面上橢圓內,則該平面內遠離橢圓的點投影距離 PD 大;該平面外的點距離該平面的距離為垂直距離 OD,距離越大,則越異常。
根據垂直距離和投影距離,可以把樣本點分為四類:
1、正常樣本點:兩個距離都小,在正常范圍內;
2、好杠桿點:投影距離大,垂直距離正常;
3、壞杠桿點:投影距離大,垂直距離大;
4、垂直外點:投影距離正常,垂直距離大。
后面三種都是異常點。
這樣可以獲得診斷圖,橫坐標為投影距離,縱坐標為垂直距離,繪制每個樣本點。聚集在原點附近的點為正常點,遠離原點的點為異常點。
當存在特別離群的點或離群點比例較高時,此時可以先去除這些離群點,然后利用剩下的正常點進行常規PCA,可以獲得更好的結果。利用此時的主方向和奇異值,重新繪制診斷圖。
上面介紹的僅是眾多魯棒主成分方法的一種,魯棒主成分方法的核心是獲得方差 u1=argmaxα∑ai∈A(αTai)2\mathbf{u}_1 = argmax_{\mathbf{\alpha}} \sum_{\mathbf{a}_{i} \in A} (\mathbf{\alpha}^T\mathbf{a}_{i})^2u1?=argmaxα?∑ai?∈A?(αTai?)2 的魯棒估計,采用絕對值只是一種比較直觀的方法。
采用中值估計方差是一個更魯棒的方法,但尋求最優解很困難。令投影為 zi=αTaiz_i = \mathbf{\alpha}^T\mathbf{a}_{i}zi?=αTai? ,則基于中值的方差估計公式為
S=1.483med(∣zi?z?∣)S = 1.483 med(|z_i - z^*|) S=1.483med(∣zi??z?∣)
其中 z?z^*z? 是投影 ziz_izi? 的中值,系數 1.483 是為了使方差估計值與高斯分布一致,SSS 為方差的平方根,稱為標準差。具體如何獲得最優解,由于很復雜,不打算展開。
總結
以上是生活随笔為你收集整理的7.4.5 鲁棒主成分分析 PCA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7.4.4 主成分分析 PCA
- 下一篇: 7.4.6 核PCA