7.4.6 核PCA
7.4.6 核PCA
經典 PCA 是線性變換,重構數據矩陣是原矩陣的投影變換,當數據點云分布呈現明顯的非線性時,線性PCA不能很好壓縮維度,達不到提取主成分的效果。例如三維空間中,點云是一條曲線分布,曲線不位于任意平面內,則對點云進行投影變換只能變換到三維空間,所以線性PCA的主成分還是3個。但曲線可以看作只有一維,“沿曲線切線方向”的維度,這就需要通過非線性變換,獲得該主成分。
假設數據矩陣為 AAA ,每列為一個樣本點 ai\mathbf{a}_{i}ai? ,對每個樣本進行非線性變換,變換函數為 Φ\PhiΦ ,注意不是線性變換,即變換函數 Φ\PhiΦ 不是矩陣。令變換后的樣本為 bi=Φ(ai)\mathbf{b}_{i} = \Phi(\mathbf{a}_{i})bi?=Φ(ai?) ,數據矩陣為 BBB ,則 B=Φ(A)B = \Phi(A)B=Φ(A) 。我們對數據矩陣 BBB 進行線性 PCA,希望獲得對數據矩陣 AAA 非線性變換能力。
數據矩陣 BBB 線性PCA變換為: BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u}BBTu=λu ,其中 λ≥0\lambda \ge 0λ≥0 是對稱半正定矩陣 BBTBB^TBBT 特征值,u\mathbf{u}u 是對應特征向量,最大前 kkk 個特征值對應的特征向量即為主方向。如果我們知道非線性變換函數 Φ\PhiΦ 的具體函數形式,則可以得到特征向量,就完美解決了非線性PCA。很可惜,對于具體問題,很難或者幾乎不可能得到 Φ\PhiΦ 的具體函數形式,所以需要另辟蹊徑,這時神奇的核技巧發揮作用。具體如下:
BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u}BBTu=λu 兩邊左乘 BTB^TBT 得
BTBBTu=λBTuB^TBB^T\mathbf{u} = \lambda B^T\mathbf{u} BTBBTu=λBTu
令 K=BTBK=B^TBK=BTB,單位向量 p=κBTu\mathbf{p} = \kappa B^T\mathbf{u}p=κBTu,則 Kp=λpK\mathbf{p} =\lambda \mathbf{p}Kp=λp,所以 λ≥0\lambda \ge 0λ≥0 是對稱半正定矩陣 KKK 特征值,p\mathbf{p}p 是對應特征向量。注意 BBT,BTBBB^T,B^TBBBT,BTB 有相同的特征值,但特征向量不同。假設我們通過核技巧,能計算出矩陣 KKK ,則我們就能得到 p、λ\mathbf{p}、\lambdap、λ 。由于 p\mathbf{p}p 是單位向量,則 1=pTp=κ2uTBBTu=κ2uTλu=κ2λ1 = \mathbf{p}^T\mathbf{p} = \kappa^2 \mathbf{u}^TBB^T\mathbf{u} = \kappa^2 \mathbf{u}^T\lambda \mathbf{u} = \kappa^2\lambda1=pTp=κ2uTBBTu=κ2uTλu=κ2λ,所以 κ=1/λ\kappa =1/ \sqrt{\lambda}κ=1/λ? 。
現在計算任意樣本 x\mathbf{x}x 的主成分即在特征向量 u\mathbf{u}u 上的投影,根據 BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u}BBTu=λu 得 u=1/λBBTu\mathbf{u} = 1/ \lambda BB^T\mathbf{u}u=1/λBBTu;因為 p=κBTu\mathbf{p} = \kappa B^T\mathbf{u}p=κBTu 得 BTu=p/κB^T\mathbf{u} = \mathbf{p}/ \kappaBTu=p/κ 。
yiu=xTu=xT1/λBBTu=1/λxTBBTu=1/λxTBp/κ=1λ(xTB)py^u_i = \mathbf{x}^T\mathbf{u} = \mathbf{x}^T 1/\lambda BB^T\mathbf{u} \\ = 1/ \lambda \mathbf{x}^TBB^T\mathbf{u} \\ = 1/ \lambda \mathbf{x}^TB \mathbf{p}/\kappa \\ = \frac{1}{\sqrt{\lambda}} (\mathbf{x}^TB) \mathbf{p} yiu?=xTu=xT1/λBBTu=1/λxTBBTu=1/λxTBp/κ=λ?1?(xTB)p
則整個樣本在特征向量 u\mathbf{u}u 上的主成分為
yu=1λBTBp=1λKp=1λλp=λp\mathbf{y}^u = \frac{1}{\sqrt{\lambda}} B^TB \mathbf{p} \\ = \frac{1}{\sqrt{\lambda}} K \mathbf{p} \\ = \frac{1}{\sqrt{\lambda}} \lambda \mathbf{p} \\ = \sqrt{\lambda}\mathbf{p} yu=λ?1?BTBp=λ?1?Kp=λ?1?λp=λ?p
所以現在剩下的核心問題是如何計算矩陣 K=BTBK=B^TBK=BTB ,根據矩陣四種乘法方式,得到矩陣 KKK 任意位置的元素為
Kij=biTbj=ΦT(ai)Φ(aj)K_{ij} = \mathbf{b}^T_{i}\mathbf{b}_{j} \\ = \Phi^T(\mathbf{a}_{i})\Phi(\mathbf{a}_{j}) Kij?=biT?bj?=ΦT(ai?)Φ(aj?)
可見其為原向量變換后的內積,由于不知道變換函數 Φ\PhiΦ ,所以沒有辦法知道 KijK_{ij}Kij? ,又陷入困局。借助神奇的核函數可以解決此困局,令
Kij=ΦT(ai)Φ(aj)=k(ai,aj)K_{ij} = \Phi^T(\mathbf{a}_{i})\Phi(\mathbf{a}_{j}) \\ = k(\mathbf{a}_{i},\mathbf{a}_{j}) Kij?=ΦT(ai?)Φ(aj?)=k(ai?,aj?)
k(ai,aj)k(\mathbf{a}_{i},\mathbf{a}_{j})k(ai?,aj?) 稱為核函數,只要知道核函數的表達式,就可以繞過變換函數 Φ\PhiΦ ,得到 KijK_{ij}Kij? ,終于解決了問題。
核函數應該滿足什么條件呢?由于需要 Kp=λpK\mathbf{p} =\lambda \mathbf{p}Kp=λp,λ≥0\lambda \ge 0λ≥0 成立,即要求 KKK 是半正定矩陣。所以只要滿足 KKK 是半正定矩陣的函數都能作為核函數,故有無窮多核函數。
最常用的核函數是高斯核,也稱徑向基核函數:k(ai,aj)=exp?(?∥ai?aj∥22σ2)k(\mathbf{a}_{i},\mathbf{a}_{j}) = \exp(-\frac{\|\mathbf{a}_{i}-\mathbf{a}_{j}\|^2}{2\sigma^2})k(ai?,aj?)=exp(?2σ2∥ai??aj?∥2?),σ>0\sigma > 0σ>0 為高斯核的寬度,其次是多項式核:k(ai,aj)=(a+baiTaj)dk(\mathbf{a}_{i},\mathbf{a}_{j}) = (a + b\mathbf{a}^T_{i}\mathbf{a}_{j})^dk(ai?,aj?)=(a+baiT?aj?)d,d≥1,a≥0,b>0d \ge 1,a \ge 0, b > 0d≥1,a≥0,b>0 ,ddd 是多項式的次數。
總結核PCA方法為:
1、根據核函數,計算核數據矩陣 K=BTB,Kij=k(ai,aj)K=B^TB, K_{ij} = k(\mathbf{a}_{i},\mathbf{a}_{j})K=BTB,Kij?=k(ai?,aj?),注意 KKK 必須是半正定矩陣;
2、矩陣 KKK 進行特征值分解 Kp=λpK\mathbf{p} = \lambda \mathbf{p}Kp=λp ,得到一系列大于零的特征值(從大到小順序排列) λ1,?,λr\lambda_1,\cdots,\lambda_rλ1?,?,λr? 及對應特征向量 p1,?,pr\mathbf{p}_1,\cdots,\mathbf{p}_rp1?,?,pr? ,根據能量法則選擇前 kkk 個最大主方向 pi\mathbf{p}_ipi?;
3、所有樣本在對應主方向 pi\mathbf{p}_ipi? 上的分量:yi=λipi\mathbf{y}_i = \sqrt{\lambda}_i\mathbf{p}_iyi?=λ?i?pi? 。
細心的讀者可能會發現,對矩陣 KKK 進行特征值分解需要矩陣 BBB 是中心化的,即每個變換后向量 bi\mathbf{b}_{i}bi? 要減去平均向量 bˉi\mathbf{\bar b}_{i}bˉi? 。即使原始向量 ai\mathbf{a}_{i}ai? 是中心化的,但由于非線性變換,也不能保證 bi\mathbf{b}_{i}bi? 是中心化的。對其中心化,讀者可自行推導得到:Kˉ=K?1nK?K1n+1nK1n\bar K = K - \mathbf{1}_n K - K \mathbf{1}_n + \mathbf{1}_n K \mathbf{1}_nKˉ=K?1n?K?K1n?+1n?K1n? ,其中矩陣 1n\mathbf{1}_n1n? 尺寸為 n×nn \times nn×n ,元素值均為 1/n1/n1/n ,nnn 是樣本數量。核PCA方法相應需要修改的地方是第二步,矩陣 KKK 進行特征值分解變為矩陣 Kˉ\bar KKˉ 進行特征值分解,其它不變。
核PCA方法優點是,如同線性PCA,越大特征值對應的主成分越重要,能對非線性的點云進行降維。缺點是,核數據矩陣 KKK 的維度為 n×nn \times nn×n,nnn 是樣本數量,所以當樣本數量很多時,對其進行特征值分解比較困難,故不能適應大數據。計算樣本在主方向上的分量的計算量與樣本數量成正比,故樣本數量很多時,計算效率比較低,特征向量 pi\mathbf{p}_ipi? 尺寸為 nnn ,故樣本數量很多時,存儲量大。
要對非線性點云的主方向提取獲得好效果,樣本在樣本空間中必須采樣足夠密,以致采樣到的點云能近似表達點云構成的完整高維曲面形狀。如果密度不夠,則曲面會存在很多“大洞”,這些“大洞”處的樣本性質是不可能由大洞附近樣本推斷出來。由于點云是曲面,“大洞”處點云性質可能與其最接近處的點云差別很大。為什么不采集足夠密的樣本呢,現在不是大數據時代嗎?很可惜,這會遭遇“維數災難”!假設樣本空間維度為 mmm ,樣本分布在單位立方體內,每維假設均勻等間隔采樣,間隔為 ddd ,則總樣本數是 (1d)m(\frac{1}ze8trgl8bvbq)^m(d1?)m ,當 mmm 很大時,比如最常見圖像,語言,語音等,其維度假設最小在 100 左右,實際上會遠大于100,當 1d=1000\frac{1}ze8trgl8bvbq=1000d1?=1000 時,需要 1030010^{300}10300 樣本數,宇宙基本粒子總數才 108010^{80}1080 個!實際上任何機器學習算法,只要涉及非線性,都需要密采樣,都會遭遇“維數災難”問題,只是有的算法比較聰明,能更好地根據附近點云預測大洞處點云,此時我們稱算法的泛化性能更好,所謂泛化性能就是算法預測大洞處點云的能力,或者說舉一反三的能力。泛化性能好的算法可以降低采樣密度。目前對于圖像來說,卷積網絡是最好的算法,語言文字是 Transformer 網絡,其它的不好說。
核PCA方法中核矩陣 KKK 僅利用了樣本的核函數信息,丟失了很多其它信息,故其表達樣本的能力有限,泛化性能不強,需要密采樣才能獲得好效果,但密采樣會有巨量樣本,核PCA方法不能處理巨量樣本,故核PCA方法使用受限。只有點云曲面足夠簡單,如比較平滑接近超平面,則“大洞”處的樣本性質很容易由大洞附近樣本推斷出來,不需要密采樣,樣本數據少,就能獲得好效果。即使點云曲面足夠簡單,核PCA方法理論上還會遭遇一個最大困難,對于某個具體問題,如何選擇最優核函數沒有指導方法,是高斯核函數更好,還是多項式更好不清楚,或者其它核函數,每種核函數的最優參數是多少也不清楚,需要不斷地試錯,來得到較好的結果。但是核PCA是無監督算法,本身是無法判斷降維效果好壞的,需要結合分類或回歸問題來判斷,這限制了核PCA應用范圍。鄙人認為,目前任何機器學習算法只要涉及非線性,理論上都找不到最優參數,需要不斷調參,因為非線性所對應點云的曲面形狀可任意,每種曲面理論上都存在最優參數,不同曲面對應的最優參數不同,目前數學還沒有很好的工具對高維點云進行非線性表達即表達不了任意曲面,所以也就在理論上找不到最優參數。所以大家不要嘲笑深度學習是調參術,不調參不行啊!試問哪個機器學習算法不需調參,只是參數多少而已,但參數過少的算法,效果差強人意。連最簡單(很少非線性)的最小二乘法的正則化參數都難以找到解析最優值。
核函數
PCA的數據矩陣為 AAA ,核PCA的數據矩陣為 BBB ,但由于不知道具體的非線性變換 Φ\PhiΦ ,可以認為數據矩陣為核矩陣 KKK ,核矩陣共有 nnn 列,故每列可以看作樣本非線性變換后的樣本,變換后樣本維度為 nnn 維。樣本 ai\mathbf{a}_iai? 變換后樣本 bi\mathbf{b}_ibi? 在第 jjj 維分量為 k(ai,aj)k(\mathbf{a}_i,\mathbf{a}_j)k(ai?,aj?) 是核函數值,所以樣本屬性完全由核函數決定。采用高斯核函數時,k(ai,aj)=exp?(?∥ai?aj∥22σ2)k(\mathbf{a}_{i},\mathbf{a}_{j}) = \exp(-\frac{\|\mathbf{a}_{i}-\mathbf{a}_{j}\|^2}{2\sigma^2})k(ai?,aj?)=exp(?2σ2∥ai??aj?∥2?),當樣本在原始空間中歐式距離近時,核值大,距離遠時,核值小。根據奇異值能量守恒定律,可以認為矩陣元素越大對奇異值貢獻度越大,所以歐式距離近的樣本 aj\mathbf{a}_{j}aj? 對樣本 ai\mathbf{a}_{i}ai? 影響更大,高斯核函數體現遠親不如近鄰原則。參數 σ\sigmaσ 度量了樣本有效作用距離,為了看清楚其影響,我們執其兩端。假設 σ\sigmaσ 趨近 000 ,則只要距離 ∥ai?aj∥\|\mathbf{a}_{i}-\mathbf{a}_{j}\|∥ai??aj?∥ 大于 0 ,則核值為 0,只有距離等于 0 時核值為 1。所以此時核矩陣為單位矩陣,每個樣本為標準單位向量 ei\mathbf{e}_iei?,分散度最大,所有特征值均為 1 ,無法壓縮,核PCA失敗。假設 σ\sigmaσ 趨近正無窮大 ,則只要距離 ∥ai?aj∥\|\mathbf{a}_{i}-\mathbf{a}_{j}\|∥ai??aj?∥ 是有限值,則核值為 0,每個樣本為零向量,所以此時核矩陣為零矩陣,樣本收縮到原點,無法區分,核PCA也失敗。所以 σ\sigmaσ 不能太小,否則樣本分散太開,所有成分都是同等重要,無法壓縮;也不能太大,否則樣本過度聚集,無法區分,存在一個合適取值區間或最優值。鄙人估計 σ\sigmaσ 較優值應該是:首先計算每個樣本與其最近樣本距離,然后求這些最近距離的平均值, σ\sigmaσ 較優值應該和平均值相當。高斯核函數遠親不如近鄰原則,當點云曲面接近平面時是合理的,但當曲面高度非線性時是不合理的,生活中的近在眼前遠在天邊就是這個道理,近在眼前表示原空間兩個樣本距離近,遠在天邊表示變換空間兩個樣本距離遠。該理論同樣適用支持向量機核函數, σ\sigmaσ 太小,樣本分散太開,所有樣本都是支持向量,造成過擬合;也不能太大,否則正負樣本過度聚集,無法正確分類。
總結
以上是生活随笔為你收集整理的7.4.6 核PCA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7.4.5 鲁棒主成分分析 PCA
- 下一篇: 7.4.7 2DPCA