Ⅰ PCA降維演算法
降維是機器學習中很重要的一種思想。在機器學習中經常會碰到一些高維的數據集,它們會佔用計算機的內存和硬碟空間,而且在運算時會減緩速度。
降維能夠使得數據量被壓縮,加快運算速度,減小儲存空間,以及方便可視化的觀察數據特點。
PS:在降維中,我們減少的是特徵種類而不是樣本數量,樣本數量m不變,特徵值數量n會減少。
一種常用的降維演算法是主成分分析演算法(Principal Component Analysis),簡稱 PCA 。
PCA是通過找到一個低維的線或面,然後將數據投影到線或面上去,然後通過減少投影誤差(即每個特徵到投影的距離的平均值)來實現降維。
上圖是一個包含二維特徵值的樣本集。黑色的叉代表樣本,紅色的線表示找到的低維的線,綠色的叉則是樣本投影在線上的位置。而它們的投影距離就是PCA演算法所需要考慮的。
通過上圖可以看出PCA演算法就是找出一個線,在數學上就是一個向量,使得其他樣本投影到該向量上的距離最小。
推而廣之:
一般情況下,將特徵值的維度從n降到k,就是找到k個向量 ,使得樣本在這些向量上的投影最小。
例如,2維降到1維,就是找到1個向量,即一條線;3維降到2維,就是找到2向量,即一個平面。
數據處理
假設有m個樣本集:
下面需要對數據做一下特徵值縮放或者均值歸一化。
先計算出平均值,然後用樣本值減去平均值。
然後用 替換 , 可以是數據最大值最小值的范圍或者標准差。
演算法部分
我們需要的就是矩陣U,他是一個n維方陣 ,它的每一列就是我們需要的向量:
使用 矩陣可以降維:
那麼要回到原來的維度上去就需要:
這里我們只能得到原來的近似值
與 近似相等,兩者之間的差就是投影誤差,或平均平方映射誤差:
數據的總變差(total variation),即樣本的長度平方的均值:
選擇維度k的最小值的方法:
表示平方投影誤差除以總變差的值小於0.01,用PCA的語言稱之為 保留了99%的差異性 。
PS:這個值是可以變化的,可以是95%,90%,85%等等。
使用循環驗證的辦法:
初始化 ,然後計算出 ,通過 計算出 和 ,然後通過上方的公式計算出值是不是小於0.01。
如果不是,增加k值,直到獲得最小的k值滿足條件。
快捷辦法
通過奇異值分解的到的矩陣 是一個n維的對角矩陣:
通過這個矩陣可以來計算:
也可以用下面的式子:
這種方法就非常快捷高效。
我們在訓練集上通過PCA獲得矩陣 ,在交叉驗證集和測試集上就不能再使用PCA來計算矩陣了,而是直接用訓練集里的矩陣來映射交叉驗證集和測試集上的數據。
PCA最常用的就是壓縮數據,加速演算法的學習,或者可視化數據。
PCA的錯誤用法,用來防止演算法過擬合
演算法過擬合的原因之一是演算法過於復雜,特徵值的維度過高,使用PCA可以降低維度,看起來會有效,但是實際上效果很差。防止演算法過擬合還是使用正則化的方法來實現。
還有一個注意點。就是在設計一個機器學習演算法時,不用一開始就考慮降維,先在不使用PCA的條件下設計演算法,當演算法出現問題,例如,演算法計算過慢,佔用大量內存...,之後當確定需要使用PCA的時候再繼續使用。
Ⅱ pca演算法指的是什麼
PCA(principle component analysis),即主成分分析法,是一個非監督的機器學習演算法,是一種用於探索高維數據結構的技術,主要用於對數據的降維,通過降維可以發現更便於人理解的特徵,加快對樣本有價值信息的處理速度,此外還可以應用於可視化(降到二維)和去噪。
PCA與LDA演算法的基本思想
數據從原陸豎慎來的坐標系轉換到新的坐標系,新坐標系的選擇是由數據本身決定的。第一個新坐標軸選擇的是原始數據中方差最大的方向,第二個新坐標軸選擇和第一個坐標軸正交且具有最大方差的方向。該過程一直重復,重復次數為原始數據早敬中特徵的數目。我們會發現,大部分方差都包含在最前面的幾個新坐標軸中。因此,我們可以忽略餘下的坐標軸,纖頌即對數據進行降維處理。
Ⅲ (十)PCA降維演算法
主成分分析(Principal components analysis,以下簡稱PCA) 是最重要的降維方法之一。在數據壓縮消除冗餘和數據噪音消除等領域都有廣泛的應用。它可以通過 線性變換 將原始數據變換為一組 各維度線性無關 的表示,以此來提取數據的主要線性分量。需要注意的是,PCA一般只用於線性數據降維,對於非線性數據一般採用KPCA。
降維就是找出數據里最主要的方面,用數據里最主要的方面來代替原始數據,並且希望損失盡可能的小。首先看幾張圖,有一個直觀的認識。
這裡面,把橢圓看成是數據:
基於這個知識,如果我們想對數據進行降維的話,比如圖1的兩個維度的數據降成一維,我們可以選擇保留X1這個維度的數據,因為在這個維度上蘊含的信息量更多。同理,圖2就可以保留x2這個維度的數據。但是,問題來了,圖3應該保留哪個維度的數據呢?答案是保留哪個維度都不好,都會丟失較大的信息量。但是,如果我們把圖3的坐標軸旋轉一下
比較容易看出,圖3在新的坐標軸下就能進行降維了。
所以,第一,變換正確的坐標軸(基);第二,保留方差最大的幾個軸作為主成分,這樣的做法就是PCA的核心思想。
從前文可以看出,理想的坐標軸是要求數據投在新坐標軸後,盡可能的分散,也就是數據的方差最大。然後每次選擇方差最大的軸作為主成分。
將前文2維降1維的例子擴展到更高維度,還有一個問題需要解決,考慮三維降到二維問題。與之前相同,首先我們希望找到一個方向使得投影後方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應該是「幾乎重合在一起」,顯然這樣的維度是沒有用的,因為發生了大量的信息重復,起不到降維的作用,因此,應該有其他約束條件——就是正交。 PCA要求軸與軸之間是正交的,也就是不同維度的信息相關性為0。
在表示相關性中,相關系數與協方差是等價的,這里為了方便計算,使用協方差。下面是協方差公式,當協方差為0時,表示兩個特徵a,b線性不相關。
可以發現,當a=b時,協方差公式就變成了方差公式,方差是特殊的協方差。如果運氣更好,特徵a與b的平均數都為0,那麼公式會進一步簡化,得到:
所以說,為了計算方便,PCA降維前,一般都要求將所有特徵屬性中心化,即平均數為0。
因為PCA要求,同一軸內方差最大,不同軸協方差為0,如何把它們放在一塊呢?這里就引入了協方差矩陣的概念:
假設有m個樣本,每個樣本特徵維度是2,每個特徵都經過中心化處理:
我們發現協方差矩陣的對角線是方差,而且是對稱矩陣。方差和協方差都放在了一個矩陣裡面,只需對這個矩陣優化,使它除了對角線的其餘元素都為0,就可以了,美滋滋。
我們知道矩陣乘法,本質上就是一種線性變換的過程。而正交基矩陣的乘法,則是坐標系變換的過程。設原空間的數據為X,協方差矩陣為C,經過正交基矩陣P,得到了新坐標系下的數據Y,即Y=PX。那麼新坐標系下的協方差矩陣D是怎樣的呢?
我們發現,新舊空間的協方差矩陣是有關系的,而且都和變換矩陣P有關系。問題就轉化成了,能不能找到一個矩陣P,使得新空間下的協方差矩陣的非對角線元素都為0.
首先,原始數據矩陣X的協方差矩陣C是一個實對稱矩陣,它有特殊的數學性質:
也就是說,P就是是協方差矩陣的特徵向量單位化後按行排列出的矩陣,其中每一行都是C的一個特徵向量。 如果設P按照中特徵值的從大到小,將特徵向量從上到下排列,則用P的前K行組成的矩陣乘以原始數據矩陣X,就得到了我們需要的降維後的數據矩陣Y 。
其實,經過數學上的推導的,我們就可以知道,特徵值對應的特徵向量就是理想中想取得正確的坐標軸,而特徵值就等於數據在旋轉之後的坐標上對應維度上的方差。
由於協方差矩陣的維度和特徵相同,所以在進行特徵值分解時,得到的特徵值數目不會超過特徵的數目。
在學習線性代數時,我們都會學矩陣的特徵值分解,我們知道一個方陣A經過 特徵值分解 後就得到 特徵向量 和 特徵值 了。那麼,這個所謂的特徵值和特徵向量到底是什麼東西呢?
很多人都會說是那個經典的式子:
首先給出概念上的一種解釋。所謂的特徵值和特徵向量,最重要的是理解「特徵」這兩個字,特徵向量翻譯為eigen vector, eigen這個單詞來自德語,本義是在「本身固有的,本質的」。純數學的定義下,並不能很明白地理解到底為什麼叫做特徵值和特徵向量。但是舉一個應用例子,可能就容易理解多了。
在圖像處理中,有一種方法就是特徵值分解。我們都知道圖像其實就是一個像素值組成的矩陣,假設有一個100x100的圖像, 對這個圖像矩陣做特徵值分解,其實是在提取這個圖像中的特徵,這些提取出來的特徵是一個個的向量,即對應著特徵向量。而這些特徵在圖像中到底有多重要,這個重要性則通過特徵值來表示。 比如這個100x100的圖像矩陣A分解之後,會得到一個100x100的特徵向量組成的矩陣Q,以及一個100x100的只有對角線上的元素不為0的矩陣E,這個矩陣E對角線上的元素就是特徵值,而且還是按照從大到小排列的(取模,對於單個數來說,其實就是取絕對值),也就是說這個圖像A提取出來了100個特徵,這100個特徵的重要性由100個數字來表示,這100個數字存放在對角矩陣E中。 在實際中我們發現,提取出來的這100個特徵從他們的特徵值大小來看,大部分只有前20(這個20不一定,有的是10,有的是30或者更多)個特徵對應的特徵值很大,後面的就都是接近0了,也就是說後面的那些特徵對圖像的貢獻幾乎可以忽略不計。
我們知道,圖像矩陣 A 特徵值分解後可以得到矩陣 P 和矩陣 E (特徵值對角矩陣):
我們可以看到,在只取前20個特徵值和特徵向量對圖像進行恢復的時候,基本上已經可以看到圖像的大體輪廓了,而取到前50的時候,幾乎已經和原圖像無異了。明白了吧,這就是所謂的矩陣的特徵向量和特徵值的作用。
所以歸根結底,特徵向量其實反應的是矩陣A本身固有的一些特徵,本來一個矩陣就是一個線性變換,當把這個矩陣作用於一個向量的時候,通常情況絕大部分向量都會被這個矩陣A變換得「面目全非」,但是偏偏剛好存在這么一些向量,被矩陣A變換之後居然還能保持原來的樣子,於是這些向量就可以作為矩陣的核心代表了。於是我們可以說:一個變換(即一個矩陣)可以由其特徵值和特徵向量完全表述,這是因為從數學上看,這個矩陣所有的特徵向量組成了這個向量空間的一組基底。而矩陣作為變換的本質其實不就把一個基底下的東西變換到另一個基底表示的空間中么?
參考:
https://blog.csdn.net/hjq376247328/article/details/80640544
https://blog.csdn.net/hustqb/article/details/78394058
https://blog.csdn.net/woainishifu/article/details/76418176
Ⅳ R數據可視化: PCA和PCoA圖, 2D和3D
主成分分析(Principal Components Analysis,PCA) ,也稱主分量分析或主成分回歸分析法,是一種無監督的數據降維方法。PCA通過線性變換將原始數據變換為一組各維度線性無關的表示,可用於提取數據的主要特徵分量,常用於高維數據的 降維 。這種降維的思想首先減少數據集的維數,同時還保持數據集的對方差貢獻最大的特徵,最終使數據直觀呈現在二維坐標系。
直觀上,第一主成分軸 優於 第二主成分軸,具有最大可分性。
主坐標分析(Principal Coordinates Analysis,PCoA),即經典多維標度(Classical multidimensional scaling),用於研究數據間的相似性。
主成分分析(Principal components analysis,PCA)是一種統計分析、簡化數據集的方法。它利用正交變換來對一系列可能相關的變數的觀測值進行線性變換,從而投影為一系列線性不相關變數的值,這些不相關變數稱為主成分(Principal Components)。具體地,主成分可以看做一個線性方程,其包含一系列線性系數來指示投影方向(如圖)。PCA對原始數據的正則化或預處理敏感(相對縮放)。PCA是最簡單的以特徵量分析多元統計分布的方法。通常情況下,這種運算可以被看作是揭露數據的內部結構,從而更好的解釋數據的變數的方法。
主坐標分析(Principal Coordinates Analysis,PCoA),即經典多維標度(Classical multidimensional scaling),用於研究數據間的相似性。PCoA與PCA都是降低數據維度的方法,但是差異在在於PCA是基於原始矩陣,而PCoA是基於通過原始矩陣計算出的距離矩陣。因此,PCA是盡力保留數據中的變異讓點的位置不改動,而PCoA是盡力保證原本的距離關系不發生改變,也就是使得原始數據間點的距離與投影中即結果中各點之間的距離盡可能相關(如圖)。
R中有很多包都提供了PCA和PCoA,比如常用的ade4包。本文將基於該包進行PCA和PCoA的分析,數據是自帶的deug,該數據提供了104個學生9門課程的成績(見截圖)和綜合評定。綜合評定有以下幾個等級:A+,A,B,B-,C-,D。
讓我們通過PCA和PCoA來看一看這樣的綜合評定是否合理,是否確實依據這9門課把這104個學生合理分配到不同組(每個等級一個組)。
前文已經介紹了PCA是基於原始數據,所以直接進行PCA分析即可。相信大家都比較熟悉散點圖的繪制方法,這里不再細講,PCA分析完畢後我們直接作圖展示結果。
整體看起來還不錯,就是B-和C-的學生似乎難以區分。
有時候PCA和PCoA的結果差不多,有時候某種方法能夠把樣本有效分開而另一種可能效果不佳,這些都要看樣本數據的特性。
除轉錄組研究以外,在16S微生物的研究中我們會根據物種豐度的文件對數據進行PCA或者PCoA分析,也是我們所說的β多樣性分析。根據PCA或者PCoA的結果看感染組和對照組能否分開,以了解微生物組的總體變化情況。
β多樣性分析的概念
Beta多樣性指的是樣本間多樣性。在腸道菌群分析中,Beta多樣性是衡量個體間微生物組成相似性的一個指標。通過計算樣本間距離可以獲得β多樣性計算矩陣,後續一般會利用PCoA、進化樹聚類等分析對此數值關系進行圖形展示。主要基於OTU的群落比較方法,有歐式距離、bray curtis距離、Jaccard 距離,這些方法優勢在於演算法簡單,考慮物種豐度(有無)和均度(相對豐度),但其沒有考慮OTUs之間的進化關系,認為OTU之間不存在進化上的聯系,每個OTU間的關系平等。另一種演算法Unifrac距離法,是根據系統發生樹進行比較,並根據16s的序列信息對OTU進行進化樹分類, 一般有加權和非加權分析。
QIIME2中重要的Beta多樣性指數:
Jaccard距離:群落差異的定性度量,即只考慮種類,不考慮豐度。
Bray-Curtis距離:群落差異的定量度量,較常用。
Unweighted UniFrac距離:包含特徵之間的系統發育關系的群落差異定性度量。
Weighted UniFrac距離:包含特徵之間的系統發育關系的群落差異定量度量。
解壓縮通過qiime2輸出的 .qza文件,獲得繪圖的matrix和pcoa結果文件
將pcoa結果整理成下表,保存為 ***_site.txt
注意沒有legend,需要AI加入。
後期需要繼續摸索,其實可以加legend的,只是目前自己的技術做不到。。。
PCA思想解析:
https://www.jianshu.com/p/09bae5cbdc53
Ⅳ 利用 PCA 來對數據降維
降維往往作為預處理步驟,其中獨立成分分析、因子分析和主成分分析比較流行,主成分分析(PCA)最為廣泛。
主成分分析會通過線性組合將多個原始變數合並成若干個主成分,這樣每個主成分都變成了原始變數的線性組合。這種轉變的目的,一方面是可以大幅降低原始數據的維度,同時也在此過程中發現原始數據屬性之間的關系。
主成分分析的主要步驟如下:
1)通常要先進行各變數的標准化工作,標准化的目的是將數據按照比例進行縮放,使之落入一個小的區間范圍之內,從而讓不同的變數經過標准化處理後可以有平等的分析和比較基礎。
2)選擇協方差陣或者相關陣計算特徵根及對應的特徵向量。
3)計算方差貢獻率,並根據方差貢獻率的閥值選取合適的主成分個數。
4)根據主成分載荷的大小對選擇的主成分進行命名。
5)根據主成分載荷計算各個主成分的得分。
將主成分進行推廣和延伸即成為因子分析(Factor Analysis),因子分析在綜合原始變數信息的基礎上將會力圖構築若干個意義較為明確的公因子;也就是說,採用少數幾個因子描述多個指標之間的聯系,將比較密切的變數歸為同一類中,每類變數即是一個因子。之所以稱其為因子,是因為它們實際上是不可測量的,只能解釋。
主成分分析是因子分析的一個特例,兩者的區別和聯系主要表現在以下方面:
❑ 主成分分析會把主成分表示成各個原始變數的線性組合,而因子分析則把原始變數表示成各個因子的線性組合。這個區別最直觀也最容易記住。
❑ 主成分分析的重點在於解釋原始變數的總方差,而因子分析的重點在於解釋原始變數的協方差。
❑ 在主成分分析中,有幾個原始變數就有幾個主成分,而在因子分析中,因子個數可以根據業務場景的需要人為指定,並且指定的因子數量不同,則分析結果也會有差異。
❑ 在主成分分析中,給定的協方差矩陣或者相關矩陣的特徵值是唯一時,主成分也是唯一的,但是在因子分析中,因子不是唯一的,並且通過旋轉可以得到不同的因子。
主成分分析和因子分析在數據化運營實踐中主要用於數據處理、降維、變數間關系的探索等方面,同時作為統計學里的基本而重要的分析工具和分析方法,它們在一些專題分析中也有著廣泛的應用。
PCA藉助於一個正交變換,將其分量相關的原隨機變數轉化成其分量不相關的新隨機變數。主要作用是對高維數據進行降維。PCA把原先的n個特徵用數目更少的k個特徵取代,新特徵是舊特徵的線性組合,這些線性組合最大化樣本方差,盡量使新的k個特徵互不相關。
PCA 可以從數據中識別其主要特徵,它是通過沿著數據最大方差方向旋轉坐標軸來實現的。選擇方差最大的方向作為第一條坐標軸,後續坐標軸則與前面坐標軸正交。協方差矩陣上的特徵值分析可以用一系列的正交坐標軸來獲取。
優點: 降低數據的復雜性,識別最重要的多個特徵。
缺點: 不一定需要,且可能損失有用信息。
PCA的主要演算法如下:
組織數據形式,以便於模型使用;
計算樣本每個特徵的平均值;
每個樣本數據減去該特徵的平均值(歸一化處理);
求協方差矩陣;
找到協方差矩陣的特徵值和特徵向量;
對特徵值和特徵向量重新排列(特徵值從大到小排列);
對特徵值求取累計貢獻率;
對累計貢獻率按照某個特定比例選取特徵向量集的子集合;
對原始數據(第三步後)進行轉換。
其中協方差矩陣的分解可以通過按對稱矩陣的特徵向量來,也可以通過分解矩陣的SVD來實現,而在Scikit-learn中,也是採用SVD來實現PCA演算法的。這里給出帶SVD的原始演算法和Scikit-learn模塊實現的PCA類。