主成分分析(PCA)原理詳解_轉載

一、PCA簡介

1. 相關背景

???? ?在許多領域的研究與應用中,往往需要對反映事物的多個變量進行大量的觀測,收集大量數據以便進行分析尋找規律。多變量大樣本無疑會為研究和應用提供了豐富的信息,但也在一定程度上增加了數據采集的工作量,更重要的是在多數情況下,許多變量之間可能存在相關性,從而增加了問題分析的復雜性,同時對分析帶來不便。如果分別對每個指標進行分析,分析往往是孤立的,而不是綜合的。盲目減少指標會損失很多信息,容易產生錯誤的結論。

???? ?因此需要找到一個合理的方法,在減少需要分析的指標同時,盡量減少原指標包含信息的損失,以達到對所收集數據進行全面分析的目的。由于各變量間存在一定的相關關系,因此有可能用較少的綜合指標分別綜合存在于各變量中的各類信息。主成分分析與因子分析就屬于這類降維的方法。

2. 問題描述
????? 下表1是某些學生的語文、數學、物理、化學成績統計:

?

?

???????首先,假設這些科目成績不相關,也就是說某一科目考多少分與其他科目沒有關系。那么一眼就能看出來,數學、物理、化學這三門課的成績構成了這組數據的主成分(很顯然,數學作為第一主成分,因為數學成績拉的最開)。為什么一眼能看出來?因為坐標軸選對了!下面再看一組學生的數學、物理、化學、語文、歷史、英語成績統計,見表2,還能不能一眼看出來:

?

?

????? 數據太多了,以至于看起來有些凌亂!也就是說,無法直接看出這組數據的主成分,因為在坐標系下這組數據分布的很散亂。究其原因,是因為無法撥開遮住肉眼的迷霧~如果把這些數據在相應的空間中表示出來,也許你就能換一個觀察角度找出主成分。如下圖1所示:

?

?

????? 但是,對于更高維的數據,能想象其分布嗎?就算能描述分布,如何精確地找到這些主成分的軸?如何衡量你提取的主成分到底占了整個數據的多少信息?所以,我們就要用到主成分分析的處理方法。

3. 數據降維
????? 為了說明什么是數據的主成分,先從數據降維說起。數據降維是怎么回事兒?假設三維空間中有一系列點,這些點分布在一個過原點的斜面上,如果你用自然坐標系x,y,z這三個軸來表示這組數據的話,需要使用三個維度,而事實上,這些點的分布僅僅是在一個二維的平面上,那么,問題出在哪里?如果你再仔細想想,能不能把x,y,z坐標系旋轉一下,使數據所在平面與x,y平面重合?這就對了!如果把旋轉后的坐標系記為x',y',z',那么這組數據的表示只用x'和y'兩個維度表示即可!當然了,如果想恢復原來的表示方式,那就得把這兩個坐標之間的變換矩陣存下來。這樣就能把數據維度降下來了!但是,我們要看到這個過程的本質,如果把這些數據按行或者按列排成一個矩陣,那么這個矩陣的秩就是2!這些數據之間是有相關性的,這些數據構成的過原點的向量的最大線性無關組包含2個向量,這就是為什么一開始就假設平面過原點的原因!那么如果平面不過原點呢?這就是數據中心化的緣故!將坐標原點平移到數據中心,這樣原本不相關的數據在這個新坐標系中就有相關性了!有趣的是,三點一定共面,也就是說三維空間中任意三點中心化后都是線性相關的,一般來講n維空間中的n個點一定能在一個n-1維子空間中分析!

????上一段文字中,認為把數據降維后并沒有丟棄任何東西,因為這些數據在平面以外的第三個維度的分量都為0。現在,假設這些數據在z'軸有一個很小的抖動,那么我們仍然用上述的二維表示這些數據,理由是我們可以認為這兩個軸的信息是數據的主成分,而這些信息對于我們的分析已經足夠了,z'軸上的抖動很有可能是噪聲,也就是說本來這組數據是有相關性的,噪聲的引入,導致了數據不完全相關,但是,這些數據在z'軸上的分布與原點構成的夾角非常小,也就是說在z'軸上有很大的相關性,綜合這些考慮,就可以認為數據在x',y'?軸上的投影構成了數據的主成分!

??課堂上老師談到的特征選擇的問題,其實就是要剔除的特征主要是和類標簽無關的特征。而這里的特征很多是和類標簽有關的,但里面存在噪聲或者冗余。在這種情況下,需要一種特征降維的方法來減少特征數,減少噪音和冗余,減少過度擬合的可能性。

??? PCA的思想是將n維特征映射到k維上(k<n),這k維是全新的正交特征。這k維特征稱為主成分,是重新構造出來的k維特征,而不是簡單地從n維特征中去除其余n-k維特征。

二、PCA實例
????? 現在假設有一組數據如下:

?

?

????? 行代表了樣例,列代表特征,這里有10個樣例,每個樣例兩個特征。可以這樣認為,有10篇文檔,x是10篇文檔中“learn”出現的TF-IDF,y是10篇文檔中“study”出現的TF-IDF。

??? 第一步,分別求x和y的平均值,然后對于所有的樣例,都減去對應的均值。這里x的均值是1.81,y的均值是1.91,那么一個樣例減去均值后即為(0.69,0.49),得到

?

?

???? 第二步,求特征協方差矩陣,如果數據是3維,那么協方差矩陣是

?

?

???? 這里只有x和y,求解得

?

?

???? 對角線上分別是x和y的方差,非對角線上是協方差。協方差是衡量兩個變量同時變化的變化程度。協方差大于0表示x和y若一個增,另一個也增;小于0表示一個增,一個減。如果x和y是統計獨立的,那么二者之間的協方差就是0;但是協方差是0,并不能說明x和y是獨立的。協方差絕對值越大,兩者對彼此的影響越大,反之越小。協方差是沒有單位的量,因此,如果同樣的兩個變量所采用的量綱發生變化,它們的協方差也會產生樹枝上的變化。

????第三步,求協方差的特征值和特征向量,得到

?

?

????? 上面是兩個特征值,下面是對應的特征向量,特征值0.0490833989對應特征向量為,這里的特征向量都歸一化為單位向量。

??? 第四步,將特征值按照從大到小的順序排序,選擇其中最大的k個,然后將其對應的k個特征向量分別作為列向量組成特征向量矩陣。

??? 這里特征值只有兩個,我們選擇其中最大的那個,這里是1.28402771,對應的特征向量是(-0.677873399,?-0.735178656)T。

??? 第五步,將樣本點投影到選取的特征向量上。假設樣例數為m,特征數為n,減去均值后的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特征向量組成的矩陣為EigenVectors(n*k)。那么投影后的數據FinalData為

FinalData(10*1)?=?DataAdjust(10*2矩陣)?x?特征向量(-0.677873399,?-0.735178656)T

????得到的結果是

?

?

????? 這樣,就將原始樣例的n維特征變成了k維,這k維就是原始特征在k維上的投影。

??? 上面的數據可以認為是learn和study特征融合為一個新的特征叫做LS特征,該特征基本上代表了這兩個特征。上述過程如下圖2描述:

?

?

????? 正號表示預處理后的樣本點,斜著的兩條線就分別是正交的特征向量(由于協方差矩陣是對稱的,因此其特征向量正交),最后一步的矩陣乘法就是將原始樣本點分別往特征向量對應的軸上做投影。

??? 整個PCA過程貌似及其簡單,就是求協方差的特征值和特征向量,然后做數據轉換。但是有沒有覺得很神奇,為什么求協方差的特征向量就是最理想的k維向量?其背后隱藏的意義是什么?整個PCA的意義是什么?

三、PCA推導
????? 先看下面這幅圖:

?

?

????? 在第一部分中,我們舉了一個學生成績的例子,里面的數據點是六維的,即每個觀測值是6維空間中的一個點。我們希望將6維空間用低維空間表示。

??? 先假定只有二維,即只有兩個變量,它們由橫坐標和縱坐標所代表;因此每個觀測值都有相應于這兩個坐標軸的兩個坐標值;如果這些數據形成一個橢圓形狀的點陣,那么這個橢圓有一個長軸和一個短軸。在短軸方向上,數據變化很少;在極端的情況,短軸如果退化成一點,那只有在長軸的方向才能夠解釋這些點的變化了;這樣,由二維到一維的降維就自然完成了。

??? 上圖中,u1就是主成分方向,然后在二維空間中取和u1方向正交的方向,就是u2的方向。則n個數據在u1軸的離散程度最大(方差最大),數據在u1上的投影代表了原始數據的絕大部分信息,即使不考慮u2,信息損失也不多。而且,u1、u2不相關。只考慮u1時,二維降為一維。

??? 橢圓的長短軸相差得越大,降維也越有道理。

1. 最大方差理論
????? 在信號處理中認為信號具有較大的方差,噪聲有較小的方差,信噪比就是信號與噪聲的方差比,越大越好。如前面的圖,樣本在u1上的投影方差較大,在u2上的投影方差較小,那么可認為u2上的投影是由噪聲引起的。

??? ?因此我們認為,最好的k維特征是將n維樣本點轉換為k維后,每一維上的樣本方差都很大。

???? 比如我們將下圖中的5個點投影到某一維上,這里用一條過原點的直線表示(數據已經中心化):

?

?

??? 假設我們選擇兩條不同的直線做投影,那么左右兩條中哪個好呢?根據我們之前的方差最大化理論,左邊的好,因為投影后的樣本點之間方差最大(也可以說是投影的絕對值之和最大)。

???? 計算投影的方法見下圖5:

?

?

?

?????? 圖中,紅色點表示樣例,藍色點表示在u上的投影,u是直線的斜率也是直線的方向向量,而且是單位向量。藍色點是在u上的投影點,離原點的距離是<x,u>(即xTu或者uTx)。

2.?最小二乘法
???? 我們使用最小二乘法來確定各個主軸(主成分)的方向。

??? 對給定的一組數據(下面的闡述中,向量一般均指列向量):

???????

?

??? 其數據中心位于:

??????

?

???

??? 數據中心化(將坐標原點移到樣本點的中心點):

?????? ?

?

??? 中心化后的數據在第一主軸u1方向上分布散的最開,也就是說在u1方向上的投影的絕對值之和最大(也可以說方差最大),計算投影的方法上面已經闡述,就是將x與u1做內積,由于只需要求u1的方向,所以設u1也是單位向量。

??? 在這里,也就是最大化下式:

???? ??

?

??? 由矩陣代數相關知識可知,可以對絕對值符號項進行平方處理,比較方便。所以進而就是最大化下式:

?????? ?

?

??? 兩個向量做內積,可以轉化成矩陣乘法:

????? ?

?

??? 所以目標函數可以表示為:

??? ???

?

??? 括號里面就是矩陣乘法表示向量內積,由于列向量轉置以后是行向量,行向量乘以列向量得到一個數,一個數的轉置還是其本身,所以又可以將目標函數化為:

?????? ?

?

??? 去括號:

?????? ?

?

??? 又由于u1和i無關,可以拿到求和符外面,上式化簡為:

????? ?

?

??? 學過矩陣代數的同學可能已經發現了,上式括號里面求和后的結果,就相當于一個大矩陣乘以自身的轉置,其中,這個大矩陣的形式如下:

????? ?

?

??? X矩陣的第i列就是xi

??? 于是有:

???????

?

??? 所以目標函數最終化為:

???? ??

?

??? 其中的就是一個二次型,

??? 我們假設的某一特征值為λ,對應的特征向量為ξ,有

????? ?

?

??? 所以,是半正定的對稱矩陣,即是半正定陣的二次型,由矩陣代數知識得出,目標函數存在最大值!

??? 下面我們求解最大值、取得最大值時u1的方向這兩個問題。

??? 先解決第一個問題,對于向量x的二范數平方為:

???? ??

?

??? 同樣,目標函數也可以表示成映射后的向量的二范數平方:

??? ???

?

????把二次型化成一個范數的形式,由于u1取單位向量,最大化目標函數的基本問題也就轉化為:對一個矩陣,它對一個向量做變換,變換前后的向量的模長伸縮尺度如何才能最大?我們有矩陣代數中的定理知,向量經矩陣映射前后的向量長度之比的最大值就是這個矩陣的最大奇異值,即:

???? ??

?

??? 式中,是矩陣A的最大奇異值(亦是矩陣A的二范數),它等于(或)的最大特征值開平方。

?? ?針對本問題來說,是半正定對稱陣,也就意味著它的特征值都大于等于0,且不同特征值對應的特征向量是正交的,構成所在空間的一組單位正交基。

? ??再解決第二個問題,對一般情況,設對稱陣的n個特征值分別為:

???? ?

?

? ??相應的單位特征向量為:

??? ?

?

??? 任取一個向量x,用特征向量構成的空間中的這組基表示為:

???? ?

?

??? 則:

?????

?

?? ?所以:

???? ?

?

??? 針對第二個問題,我們取上式中的,目標函數取得最大值,也就是的最大特征值時,對應的特征向量的方向,就是第一主成分u1的方向!(第二主成分的方向為的第二大特征值對應的特征向量的方向,以此類推)。

?? ?證明完畢。

?? ?主成分所占整個信息的百分比可用下式計算:

?

?

? ??式中分母為所有奇異值平方和,分子為所選取的前k大奇異值平方和。

?? ?有些研究工作表明,所選的主軸總長度占所有主軸長度之和的大約85%?即可,其實,這只是一個大體的說法,具體選多少個,要看實際情況而定。

3.意義
??? ?PCA將n個特征降維到k個,可以用來進行數據壓縮,例如100維的向量最后可以用10維來表示,那么壓縮率為90%。同樣圖像處理領域的KL變換使用PCA做圖像壓縮,人臉檢測和匹配。比如如下摘自另一篇博客上的Matlab實驗結果:

?

?

?

?

?

?

可見測試樣本為人臉的樣本的重建誤差顯然小于非人臉的重建誤差。

??? 另外PCA還可以聯系奇異值分解(SVD),來用于預測矩陣中缺失的元素,可以應用到評分預測等實際項目中。詳見后續SVD的博客。

一些pca的代碼

https://files-cdn.cnblogs.com/files/henuliulei/face.7z

原文:https://blog.csdn.net/zhongkelee/article/details/44064401

轉載于:https://www.cnblogs.com/henuliulei/p/10826646.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac cnpm裝包時提示Error: EACCES: permission denied解決辦法

Cnpm裝包時提示Error: EACCES: permission denied解決辦法 2018年03月04日 09:31:51 miniminixu 閱讀數&#xff1a;1598 版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/miniminixu/article/details/79434609 只需在cnpm …

特征點檢測 FAST算法及代碼詳解

本文著重介紹了用于圖像特征點檢測的算法&#xff0c;FAST算法&#xff0c;以及使用matlab的實現。 FAST算法是一種拐點檢測算法&#xff0c;其主要應用于提取圖像中的特征點&#xff0c;在動態成像的一系列圖像中追蹤定位對象。眾所周知&#xff0c;我們生活的世界是動態化的…

Python Email發送,通知業務完成

Email 發送 #!/usr/bin/python # -*- coding: UTF-8 -*- import base64 import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import formataddrdef crypt(source, key):from itertools import cycleresulttempcycle(key)f…

基于SpringCloud的分布式事務框架(LCN)

框架特點 支持各種基于spring的db框架 兼容springcloud、dubbo 使用簡單&#xff0c;代碼完全開源 基于切面的強一致性事務框架 高可用&#xff0c;模塊可以依賴dubbo或springcloud的集群方式做集群化&#xff0c;TxManager也可以做集群化 使用示例 分布式事務發起方&#xf…

一文看懂計算機神經網絡與梯度下降

1. 計算機神經網絡與神經元 要理解神經網絡中的梯度下降算法&#xff0c;首先我們必須清楚神經元的定義。如下圖所示&#xff0c;每一個神經元可以由關系式yf(∑i1nwixib)y f(\sum_{i1}^nw_ix_i b)yf(∑i1n?wi?xi?b)來描述&#xff0c;其中X[x1,x2,...,xn]X [x_1,x_2,..…

vs2015web項目無法加載64位c++的dll,提示試圖加載不正確的格式

vs2015無法加載64位c的dll&#xff0c;提示試圖加載不正確的格式&#xff01; 開始用winform引用64位的c的dll&#xff0c;在項目的屬性設置生成里面選擇any cpu或者x64都可以成功! 但在web項目和接口里面運行就提示試圖加載不正確的格式&#xff0c;想辦法找了一天也沒處理掉&…

使用Rancher搭建K8S測試環境

環境準備&#xff08;4臺主機&#xff0c;Ubuntu16.04Docker1.12.6 SSH&#xff09;&#xff1a; rancher1 192.168.3.160 只做管理節點 node1 192.168.3.161 K8S的節點1 node2 192.168.3.162 K8S的節點2 node3 192.168.3.163 K8S的節點3 此時如…

Anaconda安裝tensorflow報錯問題解決方法

最近脫離了googlecolab想使用本地的anaconda進行機器學習課題的演練&#xff0c;在安裝tensorflow時報錯 : UnsatisfiableError: The following specifications were found。下面給出解決方法。 發現實際原因是由于anaconda的python環境&#xff0c;當前版本的tensorflow只能適…

5.07—018—周二

今日所學內容 一、模塊 二、遞歸刪除的思路 三、案例&#xff1a;跨文件夾移動文件 四、案例 遞歸遍歷打印目標路徑中所有的txt文件 五、項目開放周期 一、模塊 1、與時間相關的模塊 1&#xff09;time &#xff1a;時間 時間戳(timestamp)&#xff1a;time.time()  延遲線程…

機器學習模型中step與epoch,batch_size之間的關系

本文主要談談自己對step&#xff0c;epoch&#xff0c;batch_size這幾個常見參數的理解。 最近在調試模型的時候&#xff0c;發現在使用keras.optimizer.adam時&#xff0c;模型在添加了新的一層2D卷積層后難以收斂&#xff0c;在不調整初始權重矩陣的情況下&#xff0c;想通過…

yml的mybatis的sql查看

yml的mybatis的sql查看 控制臺輸出結果:

Debian 安裝 yum

sudo apt-get updatesudo apt-get install build-essentialsudo apt-get install yum轉載于:https://www.cnblogs.com/baiqian/p/10840169.html

unity如何讓canvas總是顯示在所有層的最上方?

由于unity中的圖層都是從上至下渲染的&#xff0c;那么在渲染的過程中&#xff0c;只需要將canvas所在的UI層的渲染優先級order排在其他層之后&#xff0c;就可以保證UI畫面總是最后加載出來的了。 在canvas的inspector中修改order in layer 或者 sorting layer都可以實現這一…

FZU - 2037 -Maximum Value Problem(規律題)

Let’s start with a very classical problem. Given an array a[1…n] of positive numbers, if the value of each element in the array is distinct, how to find the maximum element in this array? You may write down the following pseudo code to solve this proble…

解決Feign接口調用有時候不好用的分析思路

很多架構師為了鑒權&#xff0c;會把controller帶過來的header信息一股腦的利用feign的攔截器帶入RequestTemplate&#xff0c;然后方便feign接口鑒權。這時候可能會帶入其他的header信息&#xff0c;比如content-type&#xff0c;而有的feign接口是對特定對header信息有要求的…

關于同時可用git命令clone和TortoiseGit拉取代碼不需要密碼

工作需要在windows7下使用git分布式版本控制系統&#xff0c;需要同時可以在git命令行模式或TortoiseGit拉取代碼而不需要每次輸入密碼。 這時候需要同時安裝git和TortoiseGit。 git使用命令ssh-keygen -C “郵箱地址” -t rsa產生的密鑰在TortoiseGit中不能用。TortoiseGit 使…

交叉驗證 cross validation 與 K-fold Cross Validation K折疊驗證

交叉驗證&#xff0c;cross validation是機器學習中非常常見的驗證模型魯棒性的方法。其最主要原理是將數據集的一部分分離出來作為驗證集&#xff0c;剩余的用于模型的訓練&#xff0c;稱為訓練集。模型通過訓練集來最優化其內部參數權重&#xff0c;再在驗證集上檢驗其表現。…

這個太有意思了,程序員可以消遣娛樂

/***        ┏┓ ┏┓ *       ┏┛┻━━━━━━━┛┻┓ *       ┃       ┃*       ┃   ━   ┃ *       █████━█████ ┃*       ┃       ┃ *       ┃   ┻   ┃* …

第十一周總結

這個作業屬于那個課程 C語言程序設計II 這個作業要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/3203 我在這個課程的目標是 理解與使用遞歸函數。 參考文獻 基礎題 2-1 宏定義“#define DIV(a, b) a/b”&#xff0c;經DIV(x …

softmax函數與交叉熵損失函數

本文主要介紹了當前機器學習模型中廣泛應用的交叉熵損失函數與softmax激勵函數。 這個損失函數主要應用于多分類問題&#xff0c;用于衡量預測值與實際值之間的相似程度。 交叉熵損失函數定義如下: LCE(y^,y?)?∑i1Nclassesyi?log(yi^)L_{CE}(\hat{y}, y^*) - \sum_{i1}^…