日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

主成分分析的数学原理

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主成分分析的数学原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PCA(Principal Component Analysis)是一種常用的數據分析方法。PCA通過線性變換將原始數據變換為一組各維度線性無關的表示,可用于提取數據的主要特征分量,常用于高維數據的降維。網上關于PCA的文章有很多,但是大多數只描述了PCA的分析過程,而沒有講述其中的原理。這篇文章的目的是介紹PCA的基本數學原理。

1.數據的向量表示以及降維問題

一般情況下,在數據挖掘和機器學習中,數據被表示為向量。例如某個淘寶店2012年全年的流量及交易情況可以看成一組記錄的集合,其中每一天的數據是一條記錄,格式如下:
(日期, 瀏覽量, 訪客數, 下單數, 成交數, 成交金額)
其中“日期”是一個記錄標志而非度量值,而數據挖掘關心的大多是度量值,因此如果我們忽略日期這個字段后,我們得到一組記錄,每條記錄可以被表示為一個五維向量,其中一條看起來大約是這個樣子:

我們當然可以對這一組五維向量進行分析和挖掘,不過我們知道,很多機器學習算法的復雜度和數據的維數有著密切關系,甚至與維數呈指數級關聯。當然,這里區區五維的數據,也許還無所謂,但是實際機器學習中處理成千上萬甚至幾十萬維的情況也并不罕見,在這種情況下,機器學習的資源消耗是不可接受的,因此我們必須對數據進行降維。
降維當然意味著信息的丟失,不過鑒于實際數據本身常常存在的相關性,我們可以想辦法在降維的同時將信息的損失盡量降低。
上面淘寶店鋪的數據,從經驗我們可以知道,“瀏覽量”和“訪客數”往往具有較強的相關關系,而“下單數”和“成交數”也具有較強的相關關系。這里我們非正式的使用“相關關系”這個詞,可以直觀理解為“當某一天這個店鋪的瀏覽量較高(或較低)時,我們應該很大程度上認為這天的訪客數也較高(或較低)”。后面的章節中我們會給出相關性的嚴格數學定義。
這種情況表明,如果我們刪除瀏覽量或訪客數其中一個指標,我們應該期待并不會丟失太多信息。因此我們可以刪除一個,以降低機器學習算法的復雜度。
上面給出的是降維的樸素思想描述,有助于直觀理解降維的動機和可行性,但并不具有操作指導意義。例如,我們到底刪除哪一列損失的信息才最小?亦或根本不是單純刪除幾列,而是通過某些變換將原始數據變為更少的列但又使得丟失的信息最小?到底如何度量丟失信息的多少?如何根據原始數據決定具體的降維操作步驟?
要回答上面的問題,就要對降維問題進行數學化和形式化的討論。而PCA是一種具有嚴格數學基礎并且已被廣泛采用的降維方法。

2.主成分分析的數學基礎

既然我們面對的數據被抽象為一組向量,那么下面有必要研究一些向量的數學性質。而這些數學性質將成為后續導出PCA的理論基礎。

2.1 內積與投影

下面先來看一個高中就學過的向量運算:內積。兩個維數相同的向量的內積被定義為:

內積運算將兩個向量映射為一個實數。其計算方式非常容易理解,但是其意義并不明顯。下面我們分析內積的幾何意義。假設A和B是兩個n維向量,我們知道n維向量可以等價表示為n維空間中的一條從原點發射的有向線段,為了簡單起見我們假設A和B均為二維向量,則A=(x1,y1),B=(x2,y2)。則在二維平面上A和B可以用兩條發自原點的有向線段表示,見下圖:

好,現在我們從A點向B所在直線引一條垂線。我們知道垂線與B的交點叫做A在B上的投影,再設A與B的夾角是a,則投影的矢量長度為|A|cos(a),其中|A|是向量A的模,也就是A線段的標量長度。
到這里還是看不出內積和這東西有什么關系,不過如果我們將內積表示為另一種我們熟悉的形式

現在事情似乎是有點眉目了:A與B的內積等于A到B的投影長度乘以B的模。再進一步,如果我們假設B的模為1,即讓|B|=1,那么就變成了:

也就是說,設向量B的模為1,則A與B的內積值等于A向B所在直線投影的矢量長度!這就是內積的一種幾何解釋,也是我們得到的第一個重要結論。在后面的推導中,將反復使用這個結論。

2.2?協方差矩陣及優化目標

選擇不同的基可以對同樣一組數據給出不同的表示,而且如果基的數量少于向量本身的維數,則可以達到降維的效果。但是我們還沒有回答一個最最關鍵的問題:如何選擇基才是最優的。或者說,如果我們有一組N維向量,現在要將其降到K維(K小于N),那么我們應該如何選擇K個基才能最大程度保留原有的信息?
要完全數學化這個問題非常繁雜,這里我們用一種非形式化的直觀方法來看這個問題。
為了避免過于抽象的討論,我們仍以一個具體的例子展開。假設我們的數據由五條記錄組成,將它們表示成矩陣形式:

其中每一列為一條數據記錄,而一行為一個字段。為了后續處理方便,我們首先將每個字段內所有值都減去字段均值,其結果是將每個字段都變為均值為0(這樣做的道理和好處后面會看到)。
我們看上面的數據,第一個字段均值為2,第二個字段均值為3,所以變換后:

我們可以看下五條數據在平面直角坐標系內的樣子:

現在問題來了:如果我們必須使用一維來表示這些數據,又希望盡量保留原始的信息,你要如何選擇?
通過上一節對基變換的討論我們知道,這個問題實際上是要在二維平面中選擇一個方向,將所有數據都投影到這個方向所在直線上,用投影值表示原始記錄。這是一個實際的二維降到一維的問題。
那么如何選擇這個方向(或者說基)才能盡量保留最多的原始信息呢?一種直觀的看法是:希望投影后的投影值盡可能分散。
以上圖為例,可以看出如果向x軸投影,那么最左邊的兩個點會重疊在一起,中間的兩個點也會重疊在一起,于是本身四個各不相同的二維點投影后只剩下兩個不同的值了,這是一種嚴重的信息丟失,同理,如果向y軸投影最上面的兩個點和分布在x軸上的兩個點也會重疊。所以看來x和y軸都不是最好的投影選擇。我們直觀目測,如果向通過第一象限和第三象限的斜線投影,則五個點在投影后還是可以區分的。
下面,我們用數學方法表述這個問題。

2.3 方差 與 協方差

上文說到,我們希望投影后投影值盡可能分散,而這種分散程度,可以用數學上的方差來表述。此處,一個字段的方差可以看做是每個元素與字段均值的差的平方和的均值,即:

上面的問題被形式化表述為:尋找一個一維基,使得所有數據變換為這個基上坐標表示后,方差值最大。

對于上面二維降成一維的問題來說,找到那個使得方差最大的方向就可以了。不過對于更高維,還有一個問題需要解決。考慮三維降到二維問題。與之前相同,首先我們希望找到一個方向使得投影后方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。
如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應該是“幾乎重合在一起”,顯然這樣的維度是沒有用的,因此,應該有其他約束條件。
從直觀上說,讓兩個字段盡可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關性的,因為相關性意味著兩個字段不是完全獨立,必然存在重復表示的信息。
數學上可以用兩個字段的協方差表示其相關性,由于已經讓每個字段均值為0,則:

可以看到,在字段均值為0的情況下,兩個字段的協方差簡潔的表示為其內積除以元素數m。
當協方差為0時,表示兩個字段完全獨立。為了讓協方差為0,我們選擇第二個基時只能在與第一個基正交的方向上選擇。因此最終選擇的兩個方向一定是正交的。
至此,我們得到了降維問題的優化目標:將一組N維向量降為K維(K大于0,小于N),其目標是選擇K個單位(模為1)正交基,使得原始數據變換到這組基上后,各字段兩兩間協方差為0,而字段的方差則盡可能大(在正交的約束下,取最大的K個方差)。

2.4 協方差矩陣 及其 對角化

上面我們導出了優化目標,但是這個目標似乎不能直接作為操作指南(或者說算法),因為它只說要什么,但根本沒有說怎么做。所以我們要繼續在數學上研究計算方案。
我們看到,最終要達到的目的與字段內方差及字段間協方差有密切關系。因此我們希望能將兩者統一表示,仔細觀察發現,兩者均可以表示為內積的形式,而內積又與矩陣相乘密切相關。于是我們來了靈感:
假設我們只有a和b兩個字段,那么我們將它們按行組成矩陣X:

然后我們用X乘以X的轉置,并乘上系數1/m:

奇跡出現了!這個矩陣對角線上的兩個元素分別是兩個字段的方差,而其它元素是a和b的協方差。兩者被統一到了一個矩陣的。
根據矩陣相乘的運算法則,這個結論很容易被推廣到一般情況:
設我們有m個n維數據記錄,將其按列排成n乘m的矩陣X,設,則C是一個對稱矩陣,其對角線分別個各個字段的方差,而第i行j列和j行i列元素相同,表示i和j兩個字段的協方差。

根據上述推導,我們發現要達到優化目地,等價于將協方差矩陣對角化:即除對角線外的其它元素化為0,并且在對角線上將元素按大小從上到下排列,這樣我們就達到了優化目的(協方差為零,保證字段正交;方差最大)。這樣說可能還不是很明晰,我們進一步看下原矩陣與基變換后矩陣協方差矩陣的關系:
設原始數據矩陣X對應的協方差矩陣為C,而P是一組基按行組成的矩陣,設Y=PX,則Y為X對P做基變換后的數據。設Y的協方差矩陣為D,我們推導一下D與C的關系:
現在事情很明白了!我們要找的P不是別的,而是能讓原始協方差矩陣對角化的P。換句話說,優化目標變成了尋找一個矩陣P,滿足是一個對角矩陣,并且對角元素按從大到小依次排列,那么P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優化條件。
由上文知道,協方差矩陣C是一個是對稱矩陣,在線性代數上,實對稱矩陣有一系列非常好的性質
1)實對稱矩陣不同特征值對應的特征向量必然正交。
2)設特征向量λ重數為r,則必然存在r個線性無關的特征向量對應于λ,因此可以將這r個特征向量單位正交化。
則具體操作為:

3.算法步驟

設有m條n維數據。
1)將原始數據按列組成n行m列矩陣X
2)將X的每一行(代表一個屬性字段)進行零均值化,即減去這一行的均值
3)求出協方差矩陣
4)求出協方差矩陣的特征值及對應的特征向量
5)將特征向量按對應特征值大小從上到下按行排列成矩陣,取前k行組成矩陣P
6)Y=PX即為降維到k維后的數據

4.進一步討論

根據上面對PCA的數學原理的解釋,我們可以了解到一些PCA的能力和限制。 PCA本質上是將方差最大的方向作為主要特征,并且在各個正交方向上將數據“離相關”,也就是讓它們在不同正交方向上沒有相關性。
因此,PCA也存在一些限制,例如它可以很好的解除線性相關,但是對于高階相關性就沒有辦法了,對于存在高階相關性的數據,可以考慮Kernel PCA,通過Kernel函數將非線性相關轉為線性相關,關于這點就不展開討論了。另外,PCA假設數據各主特征是分布在正交方向上,如果在非正交方向上存在幾個方差較大的方向,PCA的效果就大打折扣了。
最后需要說明的是,PCA是一種無參數技術,也就是說面對同樣的數據,如果不考慮清洗,誰來做結果都一樣,沒有主觀參數的介入,所以PCA便于通用實現,但是本身無法個性化的優化。

5.參考資料

1. https://en.wikipedia.org/wiki/Principal_component_analysis 2. https://en.wikipedia.org/wiki/Singular_value_decomposition 3.?https://liorpachter.wordpress.com/2014/05/26/what-is-principal-component-analysis/
4.http://www.360doc.com/content/17/0304/23/40827612_634027546.shtml

總結

以上是生活随笔為你收集整理的主成分分析的数学原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。