主成分分析法的步驟,用 “人話” 來講述,擺脫枯燥抽象的數學語言

        看了很多主成分分析的的解釋,都太理論了,完全get不到點,我又不是搞數學的。看不懂看不懂。

        打算寫一下主成分分析的步驟幫助我理解這個方法,至於裏面爲什麼要用到方差,協方差這個東西,你需要去看看相關的文獻說明,比如要解釋爲什麼協方差矩陣的特徵值最大的前 k 個特徵向量就是k維理想特徵,我看到的有三個理論:分別是最大方差理論、最小錯誤理論和座標軸相關度理論。

        這兒貼兩篇文章,這篇的內容也主要來源於這兩篇文章

                 https://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html

                 https://www.cnblogs.com/jerrylead/archive/2011/04/18/2020216.html

        而且啊,用方差最大來選擇也不一定就適用於所有的數據降維,比如數據不滿足高斯分佈的時候,用方差最大來衡量的話顯然是不明智的,所以有了獨立主元分解(ICA)的提出。

        扯遠了,閒話不多說,將講一下步驟,假設我們有m個n維的數據,我們想降維到K維(當然 K肯定小於等於n):

        1、分別求m個數據在每一維上的均值,然後每個數據的每一維都減去每一維對應的均值。舉個例子,3個2維數據(1,5),(3,4),(5,-3),我想降到1維,第一維的均值爲(1+3+5)/3=3,第二維的均值爲(5+4-3)/3=2,然後對應的減去均值變成了(-2,3),(0,2),(2,-5)。

        2、求特徵協方差矩陣,多少維的數據,協方差矩陣就是幾乘幾大小的,比如三維的如下
在這裏插入圖片描述
        主對角線是方差,其他位置是協方差。至於這個cov(x,x)、cov(x,y)怎麼計算。首先說一下方差,方差說的是自己維度與自己維度的相關性。我們第一步不是把均值變成0了嗎(這就是爲什麼要減均值),
在這裏插入圖片描述
        Var(a)就是我們求得a維的方差,他等於m個數據在這個維度上的取值平方之和除以m。協方差又是啥玩意呢?

在這裏插入圖片描述

        其實就是當前維度a與另一個維度b在m個數據上各自取值的積之和再除以m,方差也就是協方差的一種特例。那麼顯然cov(a,b)與cov(b,a)是完全等價的噻。我們計算的時候計算一次就好了。

        3、求協方差矩陣的特徵值和特徵向量,剛纔說了協方差矩陣是個n*n的方針,n是數據維度。而且cov(a,b)與cov(b,a)是完全等價的,這樣的矩陣叫做實對稱矩陣,實對稱矩陣有一系列非常好的性質:

        A、實對稱矩陣不同特徵值對應的特徵向量必然正交。

        B、設特徵向量λ重數爲r,則必然存在r個線性無關的特徵向量對應於λ,因此可以將這r個特徵向量單位正交化。

        由上面兩條可知,一個n行n列的實對稱矩陣一定可以找到n個單位正交特徵向量,設這n個特徵向量爲e1,e2,⋯,en。講了這麼多就是爲了說明協方差矩陣的特徵值和特徵向量是一定存在求得出來的,而且特徵向量還是正交的。

        4、將特徵值按照從大到小的順序排序,選擇其中最大的k個,然後將其對應的k個特徵向量分別作爲列向量組成特徵向量矩陣。沒啥技術含量,也沒啥可講的

        5、將樣本點投影到選取的特徵向量上。第一步假設樣例數爲m,特徵數爲n,減去均值後的樣本矩陣爲DataAdjust(m×n),則協方差矩陣是n×n,選取的k個特徵向量組成的矩陣爲EigenVectors(n×k)。那麼投影后的數據FinalData爲

                         FinalData(m×k) = DataAdjust(m×n) × EigenVectors(n×k)

        最終得到的數據是m個k維的,原來的數據(處理過的,減掉均值的)是m個n維的,我們選的特徵向量矩陣是n×k的,含義就是從n個特徵值中選了最大的k個。那不就完成了從n維降到了k維嗎。

        PCA技術的一個很大的優點是,它是完全無參數限制的。在PCA的計算過程中完全不需要人爲的設定參數或是根據任何經驗模型對計算進行干預,最後的結果只與數據相關,與用戶是獨立的。

        但是,這一點同時也可以看作是缺點。如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特徵,卻無法通過參數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高。所以有了kernel-PCA,它根據先驗知識對數據預先進行非線性轉換擴展了PCA能夠處理的問題的範圍,又可以結合一些先驗約束,是比較流行的方法。感興趣的自己去查查。

        再貼一個PCA的數學原理的文章,講的也蠻好,公式顯示不出來的話,多F5刷新幾次,或者 Shift+F5 刷新,二者的區別在於:

         1. F5(ctrl+r):重載當前頁面;

         2. Shift+F5(ctrl+shift+F5):忽略緩存內容,重載當前頁面。

        文章鏈接:         http://blog.codinglabs.org/articles/pca-tutorial.html

好了,到這兒就結束了,步驟就講完了。

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