1. 程式人生 > >Python機器學習:5.6 使用核PCA進行非線性映射

Python機器學習:5.6 使用核PCA進行非線性映射

公式 有一個 內容 原來 相關 ref and analysis 分類

許多機器學習算法都有一個假設:輸入數據要是線性可分的。感知機算法必須針對完全線性可分數據才能收斂。考慮到噪音,Adalien、邏輯斯蒂回歸和SVM並不會要求數據完全線性可分。

但是現實生活中有大量的非線性數據,此時用於降維的線性轉換手段比如PCA和LDA效果就不會太好。這一節我們學習PCA的核化版本,核PCA。這裏的"核"與核SVM相近。 運用核PCA,我們能將非線性可分的數據轉換到新的、低維度的特征子空間,然後運用線性分類器解決。

技術分享圖片

核函數和核技巧

還記得在核SVM那裏,我們講過解決非線性問題的手段是將他們映射到新的高維特征空間,此時數據在高維空間線性可分。為了將數據技術分享圖片映射到高維k空間,我們定義了非線性映射

函數技術分享圖片:

技術分享圖片

我們可以把核函數的功能理解為:通過創造出原始特征的一些非線性組合,然後將原來的d維度數據集映射到k維度特征空間,d<k。舉個例子,特征向量技術分享圖片,x是列向量包含d個特征,d=2,可以按照如下的規則將其映射到3維度特征空間:

技術分享圖片

同理核PCA的工作機制:通過核PCA的非線性映射,將數據轉換到一個高維度空間,然後在這個高維度空間運用標準PCA重新將數據映射到一個比原來還低的空間,最後就可以用線性分類器解決問題了。不過,這種方法涉及到兩次映射轉換,計算成本非常高,由此引出了核技巧(kernel trick)。

使用核技巧,我們能在原始特征空間直接計算兩個高維特征向量的相似性(不需要先特征映射,再計算相似性)。

在介紹核技巧前,我們先回顧標準PCA的做法。我們按照如下公式計算兩個特征k和j的協方差:

技術分享圖片

由於我們對數據已做過標準化處理,特征平均值為0,上式等價於:

技術分享圖片

同樣,我們能夠得到協方差矩陣:

技術分享圖片

Bernhard Scholkopf(B. Scholkopf, A.Smola, and K.R. Muller. Kernel Principal Component Analysis. pages 583-588, 1997)得到了上式的泛化形式,用非線性特征組合技術分享圖片替換原始數據集兩個樣本之間的點乘:

技術分享圖片

為了從協方差矩陣中得到特征向量(主成分),我們必須求解下面的等式:

技術分享圖片

其中,技術分享圖片是協方差矩陣技術分享圖片的特征值和特征向量,技術分享圖片

的求法見下面幾段內容。

我們求解核矩陣:

首先,我們寫出協方差矩陣的矩陣形式,技術分享圖片是一個n*k的矩陣:

技術分享圖片

我們將特征向量寫作:

技術分享圖片

由於技術分享圖片,得:

技術分享圖片

等式兩邊左乘技術分享圖片

技術分享圖片

這裏的技術分享圖片就是相似性(核)矩陣:

技術分享圖片

回憶核SVM我們使用核技巧避免了直接計算技術分享圖片

技術分享圖片

核PCA同樣不需要像標準PCA那樣構建轉換矩陣,我們使用核函數代替計算技術分享圖片。所以,你可以把核函數(簡稱,核)理解為計算兩個向量點乘的函數,結果可看做兩個向量的相似度。

常用的核函數有:

  • 多項式核:

技術分享圖片技術分享圖片是閾值,技術分享圖片是由用戶設定的指數。

  • 雙曲正切(sigmoid)核:

技術分享圖片

  • 徑向基函數核(高斯核):

技術分享圖片

現在總結一下核PCA的步驟,以RBF核為例:

1 計算核(相似)矩陣k,也就是計算任意兩個訓練樣本:

技術分享圖片

得到K:

技術分享圖片

舉個例子,如訓練集有100個樣本,則對稱核矩陣K的維度是100*100。

2 對核矩陣K進行中心化處理:

技術分享圖片

其中,技術分享圖片是n*n的矩陣,n=訓練集樣本數,技術分享圖片中每個元素都等於技術分享圖片.

3 計算技術分享圖片的特征值,取最大的k個特征值對應的特征向量。不同於標準PCA,這裏的特征向量並不是主成分軸。

第2步為什麽要計算技術分享圖片? 因為在PCA我們總是處理標準化的數據,也就是特征的平均值為0。當我們用非線性特征組合技術分享圖片替代點乘時,我們並沒有顯示計算新的特征空間也就沒有在新特征空間做標準化處理,我們不能保證新特征空間下的特征平均值為0,所以要對K做中心化。

Python機器學習中文版目錄(http://www.aibbt.com/a/20787.html)

轉載請註明出處,Python機器學習(http://www.aibbt.com/a/pythonmachinelearning/)

Python機器學習:5.6 使用核PCA進行非線性映射