主成分分析(PCA)原理詳解 2016/12/17 · IT技術 · 主成分分析, 數學 分享到: 21 原文出處: 中科春哥 一、PCA簡介 1. 相關背景 主成分分析(Principa

主成分分析(PCA)原理詳解

一、PCA簡介

1. 相關背景

主成分分析(Principal Component Analysis,PCA), 是一種統計方法。通過正交變換將一組可能存在相關性的變量轉換為一組線性不相關的變量,轉換后的這組變量叫主成分。

上完陳恩紅老師的《機器學習與知識發現》和季海波老師的《矩陣代數》兩門課之后,頗有體會。最近在做主成分分析和奇異值分解方面的項目,所以記錄一下心得體會。

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

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

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的博客。

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

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

相關文章

1 Hadoop簡介

1.1 什么是Hadoop 分布式計算平臺 優點&#xff1a; 高可靠性 高擴展性 高效性 在各節點之間動態地移動數據&#xff0c;保證各個節點的動態平衡 高容錯性 數據多副本&#xff1b;重新啟動失敗任務 Hadoop應用&#xff1a; Yahoo 廣告系統Web搜索研究 Facebook 數據分…

Google Xpath Helper

Google Xpath Helper 下載方法&#xff1a; 1. 訪問http://chrome-extension-downloader.com/ 2. 把https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl拷貝到文本框里面&#xff0c;然后點擊“Download Extention”按鈕。 使用方法&am…

【Tensorflow】 Object_detection之訓練PASCAL VOC數據集

參考&#xff1a;Running Locally 1、檢查數據、config文件是否配置好 可參考之前博客&#xff1a; Tensorflow Object_detection之配置Training Pipeline Tensorflow Object_detection之準備數據生成TFRecord 2、訓練模型 PIPELINE_CONFIG_PATH/data/zxx/models/research/date…

2 Hadoop的安裝與配置

需要JDK、SSH 對于偽分布式&#xff0c;Hadoop會采取與集群相同的處理方式&#xff1a;按次序啟動文件conf/slaves中記載的主機上的進程&#xff0c;只不過在偽分布式中Slave為localhost&#xff08;自身&#xff09;。 Hadoop從三個角度將主機劃分為兩種角色&#xff1a; 最…

局域網訪問控制

訪問局域網內其他機器可用如下方式&#xff1a; \\PC-name\d$\dir 或者 \\192.168.xxx.xxx\d$\dir d代表d盤 但前提是對方機器已經把本機用戶設置為管理員賬戶轉載于:https://www.cnblogs.com/jimmy-c/p/4116804.html

Unity3d 插值同步

文中大體的思路&#xff1a; A玩家 移動時&#xff0c;本機自行移動&#xff0c;并發送移動指令給服務端&#xff0c;假設移動是成功的&#xff0c;服務端同步其他客戶端 B玩家&#xff0c;B玩家 中用一個隊列 Queue 來裝服務端來的移動指令&#xff0c;然后客戶端在updata中做…

laravel數據庫相關操作說明

輸出原生sql: DB::table(users)->where([[name,,張三]])->toSql(); //輸出sql為&#xff1a;select * from users where name?; DB::table(users)->where([[name,,張三]])->getQuery(); //輸出sql為&#xff1a;select * from users where name張三; 運行原生sql查…

1 數據挖掘基礎

1.1 什么是數據挖掘 從大量數據中挖掘出隱含的、未知的、對決策有潛在價值的關系、模式和趨勢&#xff0c;并用這些知識和規則建立用于決策支持的模型&#xff0c;提供預測性決策支持的方法、工具和過程&#xff0c;這就是數據挖掘。 是統計學、數據庫技術、人工智能技術的結…

R文件報錯的原因

一般R文件報錯&#xff0c;無非是資源文件錯誤&#xff0c;圖片命名錯誤&#xff0c;但是編譯都會報錯&#xff0c;可以很快解決。但是前幾天&#xff0c;引入一個第三方aar包后&#xff0c;項目編譯正確&#xff0c;但是就是R文件報錯&#xff0c;找不到R文件&#xff0c;整個…

1.0 算法本機調試方法

算法的本機調試方法&#xff1a; 從本地文件中讀取測試數據&#xff0c;進行算法調試。 例&#xff1a;讀取兩個數&#xff0c;輸出和。 1 2 11 22 111 222 輸出&#xff1a; 3 33 333 #include <fstream> //讀取本地文件需要此頭文件。調試完成后&#xff0c;提…

[轉]Excel數據轉化為sql腳本

在實際項目開發中&#xff0c;有時會遇到客戶讓我們把大量Excel數據導入數據庫的情況。這時我們就可以通過將Excel數據轉化為sql腳本來批量導入數據庫。 1 在數據前插入一列單元格&#xff0c;用來拼寫sql語句。 具體寫法&#xff1a;"insert into t_student (id,name,age…

void Update ( ) 更新 void FixedUpdate ( )

void Update ( ) 更新 void FixedUpdate ( ) 固定更新 相同點&#xff1a;當MonoBehaviour啟用時&#xff0c;其在每一幀被調用&#xff0c;都是用來更新的。 異同點&#xff1a;第一點不同&#xff1a; Update()每一幀的時間不固定&#xff0c;即第一幀與第二幀的時間間隔t…

海量數據庫的查詢優化及分頁算法方案(一)

隨著“金盾工程”建設的逐步深入和公安信息化的高速發展&#xff0c;公安計算機應用系統被廣泛應用在各警種、各部門。與此同時&#xff0c;應用系統體系的核心、系統數據的存放地――數據庫也隨著實際應用而急劇膨脹&#xff0c;一些大規模的系統&#xff0c;如人口系統的數據…

【點分治】luoguP2664 樹上游戲

應該是一道中等難度的點分&#xff1f;麻煩在一些細節。 題目描述 lrb有一棵樹&#xff0c;樹的每個節點有個顏色。給一個長度為n的顏色序列&#xff0c;定義s(i,j) 為i 到j 的顏色數量。以及 現在他想讓你求出所有的sum[i] 輸入輸出格式 輸入格式&#xff1a; 第一行為一個整數…

EasyJoyStick使用以及兩種操作桿 EasyJoyStick的使用方法,簡單的不能再簡單 Hedgehog Team-》Easy Touch -》Add Easy Touch For C#

EasyJoyStick使用以及兩種操作桿EasyJoyStick的使用方法&#xff0c;簡單的不能再簡單Hedgehog Team-》Easy Touch -》Add Easy Touch For C#Hedgehog Team-》Easy Touch -》Extensions-》Adding A New Joystick配置如圖&#xff1a;然后看一下配置&#xff0c;我喜歡掌控性強一…

2.1 vector

表結構的數組實現隨機訪問快速尾插動態調整所占內存空間#include<vector>從0開始計數創建vector對象的三種方法&#xff1a; 1. vector<int> v;2. vector<int> v(10); //默認值為03. vecotr<double> v(10,8.6); //為每個元素指定初始值尾插&#xff1a…

文件系統管理 之 文件和目錄訪問權限設置

一、文件和目錄權限概述 在linux中的每一個文件或目錄都包含有訪問權限&#xff0c;這些訪問權限決定了誰能訪問和如何訪問這些文件和目錄。 通過設定權限可以從以下三種訪問方式限制訪問權限&#xff1a;只允許用戶自己訪問&#xff1b;允許一個預先指定的用戶組中的用戶訪問&…

Web滲透實驗:基于Weblogic的一系列漏洞

1. 攻擊機windows10 192.168.2.104 2. 靶機ip: 192.168.2.109(linux Ubantu) 192.168.2.111(windows2008R264位) 第一步&#xff1a;啟動靶機服務 分別為linux和windows windows環境搭建&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/16KyYb1v1rP9uJ6-5MBotVw   提取…

9 月 19 日,騰訊云安全中心監測到 ?Apache Tomcat 修復了2個嚴重級別的漏洞, 分別為: 信息泄露漏洞(CVE-2017-12616)、遠程代碼執行漏洞(CVE-2017-12615

9 月 19 日&#xff0c;騰訊云安全中心監測到 Apache Tomcat 修復了2個嚴重級別的漏洞&#xff0c; 分別為&#xff1a; 信息泄露漏洞&#xff08;CVE-2017-12616&#xff09;、遠程代碼執行漏洞&#xff08;CVE-2017-12615&#xff09;&#xff0c;在某些場景下&#xff0c;攻…

2.0 STL泛型編程

Standard Template Library 在命名空間std中定義了常用的數據結構和算法 三種類型的組件&#xff1a; 容器&#xff1a; ——vector、string ——set、multiset、map、multimap ——list ——bitset ——stack ——deque、queue、priority_queue 迭代器 算法&…