1、根據核函數,計算核數據矩陣 K=BTB,Kij=k(ai,aj),注意 K 必須是半正定矩陣;
2、矩陣 K 進行特徵值分解 Kp=λp ,得到一系列大於零的特徵值(從大到小順序排列) λ1,⋯,λr 及對應特徵向量 p1,⋯,pr ,根據能量法則選擇前 k 個最大主方向 pi;
3、所有樣本在對應主方向 pi 上的分量:yi=λipi 。
細心的讀者可能會發現,對矩陣 K 進行特徵值分解需要矩陣 B 是中心化的,即每個變換後向量 bi 要減去平均向量 bˉi 。即使原始向量 ai 是中心化的,但由於非線性變換,也不能保證 bi 是中心化的。對其中心化,讀者可自行推導得到:Kˉ=K−1nK−K1n+1nK1n ,其中矩陣 1n 尺寸爲 n×n ,元素值均爲 1/n ,n 是樣本數量。核PCA方法相應需要修改的地方是第二步,矩陣 K 進行特徵值分解變爲矩陣 Kˉ 進行特徵值分解,其它不變。
核PCA方法優點是,如同線性PCA,越大特徵值對應的主成分越重要,能對非線性的點雲進行降維。缺點是,核數據矩陣 K 的維度爲 n×n,n 是樣本數量,所以當樣本數量很多時,對其進行特徵值分解比較困難,故不能適應大數據。計算樣本在主方向上的分量的計算量與樣本數量成正比,故樣本數量很多時,計算效率比較低,特徵向量 pi 尺寸爲 n ,故樣本數量很多時,存儲量大。
要對非線性點雲的主方向提取獲得好效果,樣本在樣本空間中必須採樣足夠密,以致採樣到的點雲能近似表達點雲構成的完整高維曲面形狀。如果密度不夠,則曲面會存在很多“大洞”,這些“大洞”處的樣本性質是不可能由大洞附近樣本推斷出來。由於點雲是曲面,“大洞”處點雲性質可能與其最接近處的點雲差別很大。爲什麼不採集足夠密的樣本呢,現在不是大數據時代嗎?很可惜,這會遭遇“維數災難”!假設樣本空間維度爲 m ,樣本分佈在單位立方體內,每維假設均勻等間隔採樣,間隔爲 d ,則總樣本數是 (d1)m ,當 m 很大時,比如最常見圖像,語言,語音等,其維度假設最小在 100 左右,實際上會遠大於100,當 d1=1000 時,需要 10300 樣本數,宇宙基本粒子總數才 1080 個!實際上任何機器學習算法,只要涉及非線性,都需要密採樣,都會遭遇“維數災難”問題,只是有的算法比較聰明,能更好地根據附近點雲預測大洞處點雲,此時我們稱算法的泛化性能更好,所謂泛化性能就是算法預測大洞處點雲的能力,或者說舉一反三的能力。泛化性能好的算法可以降低採樣密度。目前對於圖像來說,卷積網絡是最好的算法,語言文字是 Transformer 網絡,其它的不好說。
核PCA方法中核矩陣 K 僅利用了樣本的核函數信息,丟失了很多其它信息,故其表達樣本的能力有限,泛化性能不強,需要密採樣才能獲得好效果,但密採樣會有巨量樣本,核PCA方法不能處理巨量樣本,故核PCA方法使用受限。只有點雲曲面足夠簡單,如比較平滑接近超平面,則“大洞”處的樣本性質很容易由大洞附近樣本推斷出來,不需要密採樣,樣本數據少,就能獲得好效果。即使點雲曲面足夠簡單,核PCA方法理論上還會遭遇一個最大困難,對於某個具體問題,如何選擇最優核函數沒有指導方法,是高斯核函數更好,還是多項式更好不清楚,或者其它核函數,每種核函數的最優參數是多少也不清楚,需要不斷地試錯,來得到較好的結果。但是核PCA是無監督算法,本身是無法判斷降維效果好壞的,需要結合分類或迴歸問題來判斷,這限制了核PCA應用範圍。鄙人認爲,目前任何機器學習算法只要涉及非線性,理論上都找不到最優參數,需要不斷調參,因爲非線性所對應點雲的曲面形狀可任意,每種曲面理論上都存在最優參數,不同曲面對應的最優參數不同,目前數學還沒有很好的工具對高維點雲進行非線性表達即表達不了任意曲面,所以也就在理論上找不到最優參數。所以大家不要嘲笑深度學習是調參術,不調參不行啊!試問哪個機器學習算法不需調參,只是參數多少而已,但參數過少的算法,效果差強人意。連最簡單(很少非線性)的最小二乘法的正則化參數都難以找到解析最優值。