PCA的基本數學原理

2021-03-01 算法與數學之美

來源:CodingLabs 張洋

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

當然我並不打算把文章寫成純數學文章,而是希望用直觀和易懂的方式敘述PCA的數學原理,所以整個文章不會引入嚴格的數學推導。希望讀者在看完這篇文章後能更好的明白PCA的工作原理。

一般情況下,在數據挖掘和機器學習中,數據被表示為向量。例如某個淘寶店2012年全年的流量及交易情況可以看成一組記錄的集合,其中每一天的數據是一條記錄,格式如下:

(日期, 瀏覽量, 訪客數, 下單數, 成交數, 成交金額)

其中「日期」是一個記錄標誌而非度量值,而數據挖掘關心的大多是度量值,因此如果我們忽略日期這個欄位後,我們得到一組記錄,每條記錄可以被表示為一個五維向量,其中一條看起來大約是這個樣子:

注意這裡我用了轉置,因為習慣上使用列向量表示一條記錄(後面會看到原因),本文後面也會遵循這個準則。不過為了方便有時我會省略轉置符號,但我們說到向量默認都是指列向量。

我們當然可以對這一組五維向量進行分析和挖掘,不過我們知道,很多機器學習算法的複雜度和數據的維數有著密切關係,甚至與維數呈指數級關聯。當然,這裡區區五維的數據,也許還無所謂,但是實際機器學習中處理成千上萬甚至幾十萬維的情況也並不罕見,在這種情況下,機器學習的資源消耗是不可接受的,因此我們必須對數據進行降維。

降維當然意味著信息的丟失,不過鑑於實際數據本身常常存在的相關性,我們可以想辦法在降維的同時將信息的損失儘量降低。

舉個例子,假如某學籍數據有兩列M和F,其中M列的取值是如何此學生為男性取值1,為女性取值0;而F列是學生為女性取值1,男性取值0。此時如果我們統計全部學籍數據,會發現對於任何一條記錄來說,當M為1時F必定為0,反之當M為0時F必定為1。在這種情況下,我們將M或F去掉實際上沒有任何信息的損失,因為只要保留一列就可以完全還原另一列。

當然上面是一個極端的情況,在現實中也許不會出現,不過類似的情況還是很常見的。例如上面淘寶店鋪的數據,從經驗我們可以知道,「瀏覽量」和「訪客數」往往具有較強的相關關係,而「下單數」和「成交數」也具有較強的相關關係。這裡我們非正式的使用「相關關係」這個詞,可以直觀理解為「當某一天這個店鋪的瀏覽量較高(或較低)時,我們應該很大程度上認為這天的訪客數也較高(或較低)」。後面的章節中我們會給出相關性的嚴格數學定義。

這種情況表明,如果我們刪除瀏覽量或訪客數其中一個指標,我們應該期待並不會丟失太多信息。因此我們可以刪除一個,以降低機器學習算法的複雜度。

上面給出的是降維的樸素思想描述,可以有助於直觀理解降維的動機和可行性,但並不具有操作指導意義。例如,我們到底刪除哪一列損失的信息才最小?亦或根本不是單純刪除幾列,而是通過某些變換將原始數據變為更少的列但又使得丟失的信息最小?到底如何度量丟失信息的多少?如何根據原始數據決定具體的降維操作步驟?

要回答上面的問題,就要對降維問題進行數學化和形式化的討論。而PCA是一種具有嚴格數學基礎並且已被廣泛採用的降維方法。下面我不會直接描述PCA,而是通過逐步分析問題,讓我們一起重新「發明」一遍PCA。

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

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

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

好,現在我們從A點向B所在直線引一條垂線。我們知道垂線與的交點叫做A在B上的投影,再設與的夾角是a,則投影的矢量長度為,其中是向量 A的模,也就是線段A的標量長度。

注意這裡我們專門區分了矢量長度和標量長度,標量長度總是大於等於0,值就是線段的長度;而矢量長度可能為負,其絕對值是線段長度,而符號取決於其方向與標準方向相同或相反。

到這裡還是看不出內積和這東西有什麼關係,不過如果我們將內積表示為另一種我們熟悉的形式:

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

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

下面我們繼續在二維空間內討論向量。上文說過,一個二維向量可以對應二維笛卡爾直角坐標系中從原點出發的一個有向線段。例如下面這個向量:

在代數表示方面,我們經常用線段終點的點坐標表示向量,例如上面的向量可以表示為,這是我們再熟悉不過的向量表示。

不過我們常常忽略,只有一個(3,2)本身是不能夠精確表示一個向量的。我們仔細看一下,這裡的3實際表示的是向量在x軸上的投影值是3,在y軸上的投影值是2。也就是說我們其實隱式引入了一個定義:以x軸和y軸上正方向長度為1的向量為標準。那麼一個向量(3,2)實際是說在x軸投影為3而y軸的投影為2。注意投影是一個矢量,所以可以為負。

更正式的說,向量(x,y)實際上表示線性組合:

不難證明所有二維向量都可以表示為這樣的線性組合。此處和叫做二維空間中的一組基。

所以,要準確描述向量,首先要確定一組基,然後給出在基所在的各個直線上的投影值,就可以了。只不過我們經常省略第一步,而默認以(1,0)和(0,1)為基。

我們之所以默認選擇(1,0)和(0,1)為基,當然是比較方便,因為它們分別是x和y軸正方向上的單位向量,因此就使得二維平面上點坐標和向量一一對應,非常方便。但實際上任何兩個線性無關的二維向量都可以成為一組基,所謂線性無關在二維平面內可以直觀認為是兩個不在一條直線上的向量。

例如,(1,1)和(-1,1)也可以成為一組基。一般來說,我們希望基的模是1,因為從內積的意義可以看到,如果基的模是1,那麼就可以方便的用向量點乘基而直接獲得其在新基上的坐標了!實際上,對應任何一個向量我們總可以找到其同方向上模為1的向量,只要讓兩個分量分別除以模就好了。例如,上面的基可以變為

現在,我們想獲得(3,2)在新基上的坐標,即在兩個方向上的投影矢量值,那麼根據內積的幾何意義,我們只要分別計算(3,2)和兩個基的內積,不難得到新的坐標為。下圖給出了新的基以及(3,2)在新基上坐標值的示意圖:

另外這裡要注意的是,我們列舉的例子中基是正交的(即內積為0,或直觀說相互垂直),但可以成為一組基的唯一要求就是線性無關,非正交的基也是可以的。不過因為正交基有較好的性質,所以一般使用的基都是正交的。

下面我們找一種簡便的方式來表示基變換。還是拿上面的例子,想一下,將(3,2)變換為新基上的坐標,就是用(3,2)與第一個基做內積運算,作為第一個新的坐標分量,然後用(3,2)與第二個基做內積運算,作為第二個新坐標的分量。實際上,我們可以用矩陣相乘的形式簡潔的表示這個變換:

太漂亮了!其中矩陣的兩行分別為兩個基,乘以原向量,其結果剛好為新基的坐標。可以稍微推廣一下,如果我們有m個二維向量,只要將二維向量按列排成一個兩行m列矩陣,然後用「基矩陣」乘以這個矩陣,就得到了所有這些向量在新基下的值。例如(1,1),(2,2),(3,3),想變換到剛才那組基上,則可以這樣表示:

於是一組向量的基變換被乾淨的表示為矩陣的相乘。

一般的,如果我們有M個N維向量,想將其變換為由R個N維向量表示的新空間中,那麼首先將R個基按行組成矩陣A,然後將向量按列組成矩陣B,那麼兩矩陣的乘積AB就是變換結果,其中AB的第m列為A中第m列變換後的結果。

數學表示為:

其中是一個行向量,表示第個基,是一個列向量,表示第個原始數據記錄。

特別要注意的是,這裡R可以小於N,而R決定了變換後數據的維數。也就是說,我們可以將一N維數據變換到更低維度的空間中去,變換後的維度取決於基的數量。因此這種矩陣相乘的表示也可以表示降維變換。

最後,上述分析同時給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去。更抽象的說,一個矩陣可以表示一種線性變換。很多同學在學線性代數時對矩陣相乘的方法感到奇怪,但是如果明白了矩陣相乘的物理意義,其合理性就一目了然了。

上面我們討論了選擇不同的基可以對同樣一組數據給出不同的表示,而且如果基的數量少於向量本身的維數,則可以達到降維的效果。但是我們還沒有回答一個最最關鍵的問題:如何選擇基才是最優的。或者說,如果我們有一組N維向量,現在要將其降到K維(K小於N),那麼我們應該如何選擇K個基才能最大程度保留原有的信息?

要完全數學化這個問題非常繁雜,這裡我們用一種非形式化的直觀方法來看這個問題。

為了避免過於抽象的討論,我們仍以一個具體的例子展開。假設我們的數據由五條記錄組成,將它們表示成矩陣形式:

其中每一列為一條數據記錄,而一行為一個欄位。為了後續處理方便,我們首先將每個欄位內所有值都減去欄位均值,其結果是將每個欄位都變為均值為0(這樣做的道理和好處後面會看到)。

我們看上面的數據,第一個欄位均值為2,第二個欄位均值為3,所以變換後:

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

現在問題來了:如果我們必須使用一維來表示這些數據,又希望儘量保留原始的信息,你要如何選擇?

通過上一節對基變換的討論我們知道,這個問題實際上是要在二維平面中選擇一個方向,將所有數據都投影到這個方向所在直線上,用投影值表示原始記錄。這是一個實際的二維降到一維的問題。

那麼如何選擇這個方向(或者說基)才能儘量保留最多的原始信息呢?一種直觀的看法是:希望投影后的投影值儘可能分散。

以上圖為例,可以看出如果向x軸投影,那麼最左邊的兩個點會重疊在一起,中間的兩個點也會重疊在一起,於是本身四個各不相同的二維點投影后只剩下兩個不同的值了,這是一種嚴重的信息丟失,同理,如果向y軸投影最上面的兩個點和分布在x軸上的兩個點也會重疊。所以看來x和y軸都不是最好的投影選擇。我們直觀目測,如果向通過第一象限和第三象限的斜線投影,則五個點在投影后還是可以區分的。

下面,我們用數學方法表述這個問題。

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

由於上面我們已經將每個欄位的均值都化為0了,因此方差可以直接用每個元素的平方和除以元素個數表示:

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

對於上面二維降成一維的問題來說,找到那個使得方差最大的方向就可以了。不過對於更高維,還有一個問題需要解決。考慮三維降到二維問題。與之前相同,首先我們希望找到一個方向使得投影后方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。

如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應該是「幾乎重合在一起」,顯然這樣的維度是沒有用的,因此,應該有其他約束條件。從直觀上說,讓兩個欄位儘可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關性的,因為相關性意味著兩個欄位不是完全獨立,必然存在重複表示的信息。

數學上可以用兩個欄位的協方差表示其相關性,由於已經讓每個欄位均值為0,則:

可以看到,在欄位均值為0的情況下,兩個欄位的協方差簡潔的表示為其內積除以元素數m。

當協方差為0時,表示兩個欄位完全獨立。為了讓協方差為0,我們選擇第二個基時只能在與第一個基正交的方向上選擇。因此最終選擇的兩個方向一定是正交的。

至此,我們得到了降維問題的優化目標:將一組N維向量降為K維(K大於0,小於N),其目標是選擇K個單位(模為1)正交基,使得原始數據變換到這組基上後,各欄位兩兩間協方差為0,而欄位的方差則儘可能大(在正交的約束下,取最大的K個方差)。

上面我們導出了優化目標,但是這個目標似乎不能直接作為操作指南(或者說算法),因為它只說要什麼,但根本沒有說怎麼做。所以我們要繼續在數學上研究計算方案。

我們看到,最終要達到的目的與欄位內方差及欄位間協方差有密切關係。因此我們希望能將兩者統一表示,仔細觀察發現,兩者均可以表示為內積的形式,而內積又與矩陣相乘密切相關。於是我們來了靈感:

假設我們只有a和b兩個欄位,那麼我們將它們按行組成矩陣X:

然後我們用X乘以X的轉置,並乘上係數1/m:

奇蹟出現了!這個矩陣對角線上的兩個元素分別是兩個欄位的方差,而其它元素是a和b的協方差。兩者被統一到了一個矩陣的。

根據矩陣相乘的運算法則,這個結論很容易被推廣到一般情況:

設我們有m個n維數據記錄,將其按列排成n乘m的矩陣,設,則是一個對稱矩陣,其對角線分別個各個欄位的方差,而第行列和行列元素相同,表示和兩個欄位的協方差。

根據上述推導,我們發現要達到優化目前,等價於將協方差矩陣對角化:即除對角線外的其它元素化為0,並且在對角線上將元素按大小從上到下排列,這樣我們就達到了優化目的。這樣說可能還不是很明晰,我們進一步看下原矩陣與基變換後矩陣協方差矩陣的關係:

設原始數據矩陣X對應的協方差矩陣為C,而P是一組基按行組成的矩陣,設Y=PX,則Y為X對P做基變換後的數據。設Y的協方差矩陣為D,我們推導一下D與C的關係:

現在事情很明白了!我們要找的P不是別的,而是能讓原始協方差矩陣對角化的P。換句話說,優化目標變成了尋找一個矩陣P,滿足是一個對角矩陣,並且對角元素按從大到小依次排列,那麼P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維並滿足上述優化條件。

至此,我們離「發明」PCA還有僅一步之遙!

現在所有焦點都聚焦在了協方差矩陣對角化問題上,有時,我們真應該感謝數學家的先行,因為矩陣對角化在線性代數領域已經屬於被玩爛了的東西,所以這在數學上根本不是問題。

由上文知道,協方差矩陣是一個是對稱矩陣,在線性代數上,實對稱矩陣有一系列非常好的性質:

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

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

由上面兩條可知,一個行列的實對稱矩陣一定可以找到n個單位正交特徵向量,設這個特徵向量為,我們將其按列組成矩陣:

則對協方差矩陣C有如下結論:

其中為對角矩陣,其對角元素為各特徵向量對應的特徵值(可能有重複)。

以上結論不再給出嚴格的數學證明,對證明感興趣的朋友可以參考線性代數書籍關於「實對稱矩陣對角化」的內容。

到這裡,我們發現我們已經找到了需要的矩陣P:

P是協方差矩陣的特徵向量單位化後按行排列出的矩陣,其中每一行都是C的一個特徵向量。如果設P按照中特徵值的從大到小,將特徵向量從上到下排列,則用P的前K行組成的矩陣乘以原始數據矩陣X,就得到了我們需要的降維後的數據矩陣Y。

至此我們完成了整個PCA的數學原理討論。在下面的一節,我們將給出PCA的一個實例。

為了鞏固上面的理論,我們在這一節給出一個具體的PCA實例。

PCA算法

總結一下PCA的算法步驟:

設有m條n維數據。

1)將原始數據按列組成n行m列矩陣X

2)將X的每一行(代表一個屬性欄位)進行零均值化,即減去這一行的均值

3)求出協方差矩陣

4)求出協方差矩陣的特徵值及對應的特徵向量

5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P

6)Y=PX即為降維到k維後的數據

實例1

這裡以上文提到的

為例,我們用PCA方法將這組二維數據其降到一維。

因為這個矩陣的每行已經是零均值,這裡我們直接求協方差矩陣:

然後求其特徵值和特徵向量,具體求解方法不再詳述,可以參考相關資料。求解後特徵值為:

其對應的特徵向量分別是:

其中對應的特徵向量分別是一個通解,和可取任意實數。那麼標準化後的特徵向量為:

因此我們的矩陣P是:

可以驗證協方差矩陣C的對角化:

最後我們用P的第一行乘以數據矩陣,就得到了降維後的表示:

降維投影結果如下圖:

實例2

function linear_PCA %% PARAMETERSN = 500; % number of data pointsR = [-.9 .4; .1 .2]; % covariance matrix%% PROGRAMticX = randn(N,2)*R; % correlated two-dimensional data[E,v,Xp] = km_pca(X,1); % obtain eigenvector matrix E, eigenvalues v and principal components Xptoc%% OUTPUTY = X*E(:,2);figure; hold onplot(X(:,1),X(:,2),'.')plot(E(1,1)*Xp,E(2,1)*Xp,'.r')plot(E(1,2)*Y,E(2,2)*Y,'.b')plot([0 E(1,1)],[0 E(2,1)],'g','LineWidth',4)plot([0 E(1,2)],[0 E(2,2)],'k','LineWidth',4)axis equallegend('data','first principal components','second principal components','first principal direction','second principal direction')title('linear PCA demo')function [E,v,Xp] = km_pca(X,m)N = size(X,1);[E,V] = eig(X'*X/N);v = diag(V);[v,ind] = sort(v,'descend');E = E(:,ind);Xp = X*E(:,1:m);

結果

(說明,為了畫圖效果,計算協方差矩陣之前沒有將數據中心化)

根據上面對PCA的數學原理的解釋,我們可以了解到一些PCA的能力和限制。PCA本質上是將方差最大的方向作為主要特徵,並且在各個正交方向上將數據「離相關」,也就是讓它們在不同正交方向上沒有相關性。

因此,PCA也存在一些限制,例如它可以很好的解除線性相關,但是對於高階相關性就沒有辦法了,對於存在高階相關性的數據,可以考慮Kernel PCA,通過Kernel函數將非線性相關轉為線性相關,關於這點就不展開討論了。另外,PCA假設數據各主特徵是分布在正交方向上,如果在非正交方向上存在幾個方差較大的方向,PCA的效果就大打折扣了。

最後需要說明的是,PCA是一種無參數技術,也就是說面對同樣的數據,如果不考慮清洗,誰來做結果都一樣,沒有主觀參數的介入,所以PCA便於通用實現,但是本身無法個性化的優化。

希望這篇文章能幫助朋友們了解PCA的數學理論基礎和實現原理,藉此了解PCA的適用場景和限制,從而更好的使用這個算法。

本文轉於整理於http://blog.csdn.net/xiaojidan2011/article/details/11595869

相關焦點

  • 淺談主成分分析PCA
    PCA捕捉典型的motion如果您只是對具體的應用或者使用感興趣,可以跳過第二部分;如果對其數學原理較為感興趣,可以參考第二部分。有很多很不錯的tutorial或者很好的教材可以參考,本文主要參考Bishop博士的PRML的經典教材(12.1小節)。一些比較好的資源羅列在參考文獻部分。1.
  • 30分鐘學會PCA主成分分析
    二,PCA算法的數學說明PCA主成分分析(Principal Components Analysis)是一種通過正交線性組合方式,最大化保留樣本間方差的降維方法。 = PCA(n_components=7)pca.fit(X_input)X_output = pca.transform(X_input)# 降維後,只有7維特徵print(X_output.shape)輸出如下:(506, 7)# 查看各個主成分對應的方差大小和佔全部方差的比例# 可以看到前
  • 一文讀懂PCA分析 (原理、算法、解釋和可視化)
    ;- paste("\\left[\\begin{array}", align_str, paste(format_mat, collapse=' '),"\\end{array}\\right]") return(add_env)}主成分分析簡介主成分分析 (PCA, principal component analysis)是一種數學降維方法
  • 100天搞定機器學習|Day59 主成分分析(PCA)原理及使用詳解
    數學概念方差:用來衡量隨機變量與其數學期望(均值)之間的偏離程度。統計中的方差(樣本方差)是各個數據分別與其平均數之差的平方的和的平均數。協方差:度量兩個隨機變量關係的統計量,協方差為0的兩個隨機變量是不相關的。
  • StatQuest學習筆記14——PCA
    前言——主要內容這篇筆記是StatQuest系列視頻教程的第39-43節,其中39節的內容是PCA;第40節的內容是PCA的基本思想;第41小節的內容還是
  • 用 PCA 方法進行數據降維
    PCA原理由於這個線性變換是任意的,所以可以得到不同的Y。為了取得理想的效果,我們希望Yi=(ui)』X的方差儘可能大且Yi之間相互獨立。所以我們將線性變換約束在下面的條件之內:(1)(ui)』(ui)=1 (i=1, 2, 3, ..., p)(2)Yi與Yj相互無關(i不等於j,i, j=1, 2, 3, ..., p)(3)Y1是X1、X2、...
  • scikit learn中PCA的使用方法
    sklearn.decompostion包中,主要有以下幾類:1) sklearn.decompostion.PCA:實際項目中用的最多的PCA類;2) sklearn.decompostion.IncrementPCA:PCA最大的缺點是只支持批處理,也就是說所有數據都必須在主內存空間計算,IncrementalPCA使用多個batch,然後依次調用partial_fit函數,降維結果與PCA
  • PCA主成分分析實戰和可視化 | 附R代碼和測試數據
    一文看懂PCA主成分分析中介紹了PCA分析的原理和分析的意義(基本簡介如下,更多見博客),今天就用數據來實際操練一下。
  • SNP下遊分析--PCA
    1 介紹plink --pca的用法--pca [count] ['header'] ['tabs
  • 【機器學習】無監督學習:PCA和聚類
    讓我們看下這一過程的數學:為了將數據的維度從n降至k(k <= n),我們以散度降序給軸列表排序,並移除其中最大的k項。我們從計算初始特徵的散度和協方差開始。這通常基於協方差矩陣達成。根據協方差的定義,兩項特徵的協方差據下式計算:
  • 聚類樹和PCA等排序圖的組合繪製
    pca1 <- round(100*pca$CA$eig[1]/sum(pca$CA$eig), 2)pca2 <- round(100*pca$CA$eig[2]/sum(pca$CA$eig), 2) #I 型標尺的 PCA 排序圖p <- ordiplot(pca, dis = 'site', type = 'n', choices =
  • [R語言] R語言給PCA加個圈圈
    =read.table("all.txt",header=T,sep="\t",row=1)#讀取表格pca_data=t(as.matrix(pca_data))#將表達量總表反轉,PCA函數計算的是展現的第一列的IDpca_group=factor(c(rep('A',4),rep('B',4), rep('C', '4'), rep('D', '4')))#分組,後續可以自己設置對應的組名
  • R tips:使用prcomp進行PCA降維
    <- FactoMineR::PCA(iris[,-ncol(iris)], graph = F) # 繪圖  factoextra::fviz_pca_ind(  pca_facto,  habillage = factor(iris$Species),  label = "none",  mean.point = F)
  • 聚類算法之PCA與tSNE
    # 先轉置一下,讓行為樣本>  a3=t(a3);dim(a3)[1]  40 500# prcomp()主成分分析pca_dat <- prcomp(a3, scale. = TRUE)p=autoplot(pca_dat
  • 機器學習之數據降維總結+代碼示例復現(線性代數/矩陣論/主成分分析PCA/核主成分分析KPCA/奇異值分解SVD)
    KeyWords:降維 線性代數 矩陣論 主成分分析 核主成分分析 奇異值分解關於核函數技巧的基本知識點請參照之前文章:機器學習Machine Learning之核函數(Kernel Function)原書整理關於求解對偶問題中的KKT條件基本知識點請參照之前文章:最優化導論(Machine Learning)KKT條件專題解析(Karush-Huhn-Tucker)降維技術背景知識
  • 【機器學習】無監督學習之PCA
    利用R程序包labdsv中的方法pca()進行主成分分析> food=read.table("D:/ProgramFiles/RStudio/food.txt",header=T) #讀入數據> food=food[,-1]> library(labdsv)> food.pca=pca(food,dim=4,cor=TRUE) #利用相關係數矩陣計算> summary(food.pca)Importance ofcomponents:
  • 主成分分析(PCA)實用指南(R&Python)
    所以PCA的主題圍繞的是坐標變換,對於數學狂熱分子,可能他們會覺得徒手計算樂趣多多。但為了效率和質量,我們還是乖乖用函數吧。analysis> prin_comp <- prcomp(pca.train, scale. = T)> names(prin_comp)[1] "sdev"     "rotation" "center"   "scale"    "x"prcomp()函數產生了5個有用的維度:
  • GWAS群體分層 (Population stratification):利用plink對基因型進行PCA
    簡單一個「--pca」參數即可plink --bfile myfile --pca 10 --out myfile_pca #這裡只取前10個PCA結果,如果想取其他數值,請自行設置跑完以後,會生成三個文件,分別是myfile_pca.eigenval,myfile_pca.eigenvec,myfile_pca.log
  • 生信SCI中與PCA不得不說的那點事
    )# 結果信息很齊全,多維度變為變量的貢獻度print(res.pca)# get_eigenvalue(res.pca):得到主成分的特徵值# fviz_eig(res.pca): 可視化特徵值# get_pca_ind(res.pca), get_pca_var(res.pca): 單獨獲取每個變量的方差# fviz_pca_ind
  • 用Python (scikit-learn) 做PCA分析
    為了理解使用PCA進行數據可視化的價值,本教程的第一部分介紹了應用PCA後對IRIS數據集的基本可視化。第二部分使用PCA來加速MNIST數據集上的機器學習算法(邏輯回歸)。現在,讓我們開始吧!pca.explained_variance_ratio_PCA最重要的應用之一是加速機器學習算法。在這裡使用IRIS數據集是不切實際的,因為該數據集只有150行和4個特徵列。MNIST手寫數字資料庫更合適,因為它有784個特徵列(784個維度)、一組包含60,000個示例的訓練集和一組包含10,000個示例的測試集。