⑴ 利用 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類。
⑵ 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)簡介
主成分分析實例:一個 平均值 為(1, 3)、標准差在(0.878, 0.478)方向上為3、在其正交方向為1的 高斯分布 。這里以黑色顯示的兩個向量是這個分布的 協方差矩陣 的 特徵向量 ,其長度按對應的 特徵值 之平方根為比例,並且移動到以原分布的平均值為原點。
在多元統計分析中, 主成分分析 (英語: Principal components analysis , PCA )是一種分析、簡化數據集的技術。主成分分析經常用於減少數據集的 維數 ,同時保持數據集中的對方差貢獻最大的特徵。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是,這也不是一定的,要視具體應用而定。由於主成分分析依賴所給數據,所以數據的准確性對分析結果影響很大。
主成分分析由 卡爾·皮爾遜 於1901年發明,用於分析數據及建立數理模型。其方法主要是通過對 協方差矩陣 進行特徵分解,以得出數據的主成分(即 特徵向量 )與它們的權值(即 特徵值 [3] )。PCA是最簡單的以特徵量分析多元統計分布的方法。其結果可以理解為對原數據中的 方差 做出解釋:哪一個方向上的數據值對方差的影響最大?換而言之,PCA提供了一種降低數據 維度 的有效辦法;如果分析者在原數據中除掉最小的 特徵值 所對應的成分,那麼所得的低維度數據必定是最優化的(也即,這樣降低維度必定是失去訊息最少的方法)。主成分分析在分析復雜數據時尤為有用,比如 人臉識別 。
PCA是最簡單的以特徵量分析多元統計分布的方法。通常情況下,這種運算可以被看作是揭露數據的內部結構,從而更好的解釋數據的變數的方法。如果一個多元數據集能夠在一個高維數據空間坐標系中被顯現出來,那麼PCA就能夠提供一幅比較低維度的圖像,這幅圖像即為在訊息最多的點上原對象的一個『投影』。這樣就可以利用少量的主成分使得數據的維度降低了。
PCA跟因子分析密切相關,並且已經有很多混合這兩種分析的統計包。而真實要素分析則是假定底層結構,求得微小差異矩陣的特徵向量。
PCA,Principle Component Analysis,即主成分分析法,是特徵降維的最常用手段。顧名思義,PCA 能從冗餘特徵中提取主要成分,在不太損失模型質量的情況下,提升了模型訓練速度。
如上圖所示,我們將 樣本到紅色向量的距離 稱作是投影誤差(Projection Error)。以二維投影到一維為例,PCA 就是要找尋一條直線,使得各個特徵的投影誤差足夠小,這樣才能盡可能的保留原特徵具有的信息。
因為PCA僅保留了特徵的主成分,所以PCA是一種有損的壓縮方式.
從 PCA 的執行流程中,我們知道,需要為 PCA 指定目的維度 k 。如果降維不多,則性能提升不大;如果目標維度太小,則又丟失了許多信息。
由於 PCA 減小了特徵維度,因而也有可能帶來過擬合的問題。PCA 不是必須的,在機器學習中,一定謹記不要提前優化,只有當演算法運行效率不盡如如人意時,再考慮使用 PCA 或者其他特徵降維手段來提升訓練速度。
降低特徵維度不只能加速模型的訓練速度,還能幫我們在低維空間分析數據,例如,一個在三維空間完成的聚類問題,我們可以通過 PCA 將特徵降低到二維平面進行可視化分析。
根據 13 個特徵對葡萄酒分類(推銷給不同品味的人),利用 PCA ,可以將數據從 13 維降到 2 維進行可視化。
array([[1.369e+01, 3.260e+00, 2.540e+00, 2.000e+01, 1.070e+02, 1.830e+00,
5.600e-01, 5.000e-01, 8.000e-01, 5.880e+00, 9.600e-01, 1.820e+00,
6.800e+02],
[1.269e+01, 1.530e+00, 2.260e+00, 2.070e+01, 8.000e+01, 1.380e+00,
1.460e+00, 5.800e-01, 1.620e+00, 3.050e+00, 9.600e-01, 2.060e+00,
4.950e+02],
[1.162e+01, 1.990e+00, 2.280e+00, 1.800e+01, 9.800e+01, 3.020e+00,
2.260e+00, 1.700e-01, 1.350e+00, 3.250e+00, 1.160e+00, 2.960e+00,
3.450e+02]])
array([[ 0.87668336, 0.79842885, 0.64412971, 0.12974277, 0.48853231,
-0.70326216, -1.42846826, 1.0724566 , -1.36820277, 0.35193216,
0.0290166 , -1.06412236, -0.2059076 ],
[-0.36659076, -0.7581304 , -0.39779858, 0.33380024, -1.41302392,
-1.44153145, -0.5029981 , 1.70109989, 0.02366802, -0.84114577,
0.0290166 , -0.73083231, -0.81704676],
[-1.69689407, -0.34424759, -0.32337513, -0.45327855, -0.14531976,
1.24904997, 0.31964204, -1.52069698, -0.4346309 , -0.75682931,
0.90197362, 0.51900537, -1.31256499]])
array([0.36884109, 0.19318394, 0.10752862, 0.07421996, 0.06245904,
0.04909 , 0.04117287, 0.02495984, 0.02308855, 0.01864124,
0.01731766, 0.01252785, 0.00696933])
array([[-2.17884511, -1.07218467],
[-1.80819239, 1.57822344],
[ 1.09829474, 2.22124345]])
LogisticRegression(C=1.0, class_weight=None, al=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=0, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
array([1, 3, 2, 1, 2])
array([[14, 0, 0],
[ 1, 15, 0],
[ 0, 0, 6]])
准確率(精度)為 : 0.9722222222222222
參考: https://zh.wikipedia.org/wiki/主成分分析
《 斯坦福機器學習》
《機器學習 A-Z》
⑷ 常用降維方法之PCA 和 LDA
PCA本質上是將方差最大的方向作為主要特徵,並且在各個正交方向上將數據「離相關」,也就是讓它們在不同正交方向上沒有相關性。而方差最大的那個維度是主成分。
PCA是比較常見的線性降維方法,通過線性投影將高維數據映射到低維數據中,所期望的是在投影的維度上,新特徵自身的方差盡量大,方差越大特徵越有效,盡量使產生的新特徵間的相關性越小。
PCA演算法的具體操作為對所有的樣本進行中心化操作,計算樣本的協方差矩陣,然後對協方差矩陣做特徵值分解,取最大的n個特徵值對應的特徵向量構造投影矩陣。
再舉個栗子:
下面舉一個簡單的例子,說明PCA的過程。
假設我們的數據集有10個二維數據(2.5,2.4), (0.5,0.7), (2.2,2.9), (1.9,2.2), (3.1,3.0), (2.3, 2.7), (2, 1.6), (1, 1.1), (1.5, 1.6), (1.1, 0.9),需要用PCA降到1維特徵。
首先我們對樣本中心化,這里樣本的均值為(1.81, 1.91),所有的樣本減去這個均值向量後,即中心化後的數據集為(0.69, 0.49), (-1.31, -1.21), (0.39, 0.99), (0.09, 0.29), (1.29, 1.09), (0.49, 0.79), (0.19, -0.31), (-0.81, -0.81), (-0.31, -0.31), (-0.71, -1.01)。
現在我們開始求樣本的協方差矩陣,由於我們是二維的,則協方差矩陣為:
對於我們的數據,求出協方差矩陣為:
求出特徵值為(0.0490833989, 1.28402771),對應的特徵向量分別為:
由於最大的k=1個特徵值為1.28402771,對於的k=1個特徵向量為 則我們的W=
我們對所有的數據集進行投影 得到PCA降維後的10個一維數據集為:(-0.827970186, 1.77758033, -0.992197494, -0.274210416, -1.67580142, -0.912949103, 0.0991094375, 1.14457216, 0.438046137, 1.22382056)
在上面的PCA演算法中,我們假設存在一個線性的超平面,可以讓我們對數據進行投影。但是有些時候,數據不是線性的,不能直接進行PCA降維。這里就需要用到和支持向量機一樣的核函數的思想,先把數據集從n維映射到線性可分的高維N>n,然後再從N維降維到一個低維度n', 這里的維度之間滿足n'<n<N。
使用了核函數的主成分分析一般稱之為核主成分分析(Kernelized PCA, 以下簡稱KPCA。假設高維空間的數據是由n維空間的數據通過映射ϕ產生。
則對於n維空間的特徵分解:
映射為:
通過在高維空間進行協方差矩陣的特徵值分解,然後用和PCA一樣的方法進行降維。一般來說,映射ϕ不用顯式的計算,而是在需要計算的時候通過核函數完成。由於KPCA需要核函數的運算,因此它的計算量要比PCA大很多。
這里對PCA演算法做一個總結。作為一個非監督學習的降維方法,它只需要特徵值分解,就可以對數據進行壓縮,去噪。因此在實際場景應用很廣泛。為了克服PCA的一些缺點,出現了很多PCA的變種,比如第六節的為解決非線性降維的KPCA,還有解決內存限制的增量PCA方法Incremental PCA,以及解決稀疏數據降維的PCA方法Sparse PCA等。
PCA演算法的主要優點有:
LDA(線性判別分析,Linear Discriminant Analysis)是另一種常用的降維方法,它是有監督的。LDA在模式識別領域(比如人臉識別,艦艇識別等圖形圖像識別領域)中有非常廣泛的應用,因此我們有必要了解下它的演算法原理。這里需要注意的是,此處的LDA與文本主題模型中的LDA(隱含狄利克雷分布,Latent Dirichlet Allocation)並不相同,他是一種處理文檔的主題模型。
LDA是一種監督學習的降維技術,也就是說它的數據集的每個樣本是有類別輸出的。這點和PCA不同。PCA是不考慮樣本類別輸出的無監督降維技術。
LDA的思想可以用一句話概括,就是「投影後類內方差最小,類間方差最大」。
什麼意思呢? 我們要將數據在低維度上進行投影,投影後希望每一種類別數據的投影點盡可能的接近,而不同類別的數據的類別中心之間的距離盡可能的大。
可能還是有點抽象,我們先看看最簡單的情況。假設我們有兩類數據 分別為紅色和藍色,如下圖所示,這些數據特徵是二維的,我們希望將這些數據投影到一維的一條直線,讓每一種類別數據的投影點盡可能的接近,而紅色和藍色數據中心之間的距離盡可能的大。
以上就是使用LDA進行降維的演算法流程。實際上LDA除了可以用於降維以外,還可以用於分類。一個常見的LDA分類基本思想是假設各個類別的樣本數據符合高斯分布,這樣利用LDA進行投影後,可以利用極大似然估計計算各個類別投影數據的均值和方差,進而得到該類別高斯分布的概率密度函數。當一個新的樣本到來後,我們可以將它投影,然後將投影後的樣本特徵分別帶入各個類別的高斯分布概率密度函數,計算它屬於這個類別的概率,最大的概率對應的類別即為預測類別。
LDA用於降維,和PCA有很多相同,也有很多不同的地方,因此值得好好的比較一下兩者的降維異同點。
這點可以從下圖形象的看出,在某些數據分布下LDA比PCA降維較優。
當然,某些某些數據分布下PCA比LDA降維較優,如下圖所示:
LDA演算法既可以用來降維,又可以用來分類,但是目前來說,主要還是用於降維。在我們進行圖像識別圖像識別相關的數據分析時,LDA是一個有力的工具。下面總結下LDA演算法的優缺點。
LDA演算法的主要優點有:
參考文章: 劉建平老師的博客園
⑸ pca演算法介紹及簡單實例
主成分分析(Principal components analysis,PCA)是一種分析、簡化數據集的技術。主成分分析經常用於減少數據集的維數,同時保持數據集中的對方差貢獻最大的特徵。
簡而言之,PCA就是壓縮數據,降低維度,把重要的特徵留下來。
目的:
當你有上百上千個特徵,它們可能來自不同的部門給的數據,可能這些來自不同的數據是可以互相推導的,或者某個特徵是對結果沒什麼影響的,或者來自不同的部門的數據其實在描述同一個問題,那麼這些冗餘的特徵是沒有價值的。
我們可以通過降低維度(用機器學習的話來說就是去掉一些特徵)來提高演算法效率。
在解決機器學習問題時,如果能把數據可視化,可以大大幫助我們找到解決方案。但是,如果特徵太多(即維數太多),你很難畫出圖,就算畫出來了也不容易理解。
我們可以通過降低維度使數據反映在平面或者立體空間中,便於數據分析
對於一組數據,如果它在某一坐標軸上的方差越大,說明坐標點越分散,該屬性能夠比較好的反映源數據。所以在進行降維的時候,主要目的是找到一個超平面,它能使得數據點的分布方差呈最大,這樣數據表現在新的坐標軸上時候已經足夠分散了。
我們要對數據樣本進行中心化,中心化即是指變數減去它的均值。我們通過坐標軸變換,使得原本屬於x軸的數據樣本變成w軸樣本。我們希望變化後的數據在坐標軸w的呈現的值z的方差最大,則我們會得到圖示目標函數,並且由於w是坐標軸,所以我們會得到一個約束條件。根據拉格朗日乘子法可以解決該問題,經過處理後我們把問題變成了x協方差求特徵值,求特徵向量的問題了。
我們已經在上述過程中知道了問題的數學模型,我們可以解除p個特徵值與對應的特徵向量。我們可以對特徵值進行大到小排序,如果我們要從p維 --> q維(q<p),那麼我們只需要取前q個特徵值對應的特徵向量進行向量相乘。如果問題並沒有給出具體q的值,那麼我們可以通過計算如下式子便可以知道q的取值。其中t的取值相當於是一個閾值,比如我們需要保留80%,那麼t=0.8即可。
(1)假設我們有一個二維數據,我們要通過PCA的方法來將這個二維數據降到一維。
(2)因為數據已經中心化,所以我們就省去了中心化的步驟。我們開始求x協方差。
先來看看協方差的定義和計算方式。
計算結果如下
同樣的,了解一下特徵值和特徵向量的定義以及計算方式
以此題為例,分兩步來做
a.由矩陣A的特徵方程求特徵值
b.把每個特徵值代入線性方程組,求出基礎解系。(打不出來萊姆達我也很難受)
結果如下
⑥將二維變成一維,選擇最大的特徵值和對應的特徵向量進行降維,結果如下
⑹ 主成分分析(PCA)
在許多領域的研究與應用中,往往需要對反映事物的多個變數進行大量的觀測,收集大量數據以便進行分析尋找規律。多變數大樣本無疑會為研究和應用提供了豐富的信息,但也在一定程度上增加了數據採集的工作量,更重要的是在多數情況下,許多變數之間可能存在相關性,從而增加了問題分析的復雜性,同時對分析帶來不便。如果分別對每個指標進行分析,分析往往是孤立的,而不是綜合的。盲目減少指標會損失很多信息,容易產生錯誤的結論。
因此需要找到一個合理的方法,在減少需要分析的指標同時,盡量減少原指標包含信息的損失,以達到對所收集數據進行全面分析的目的。由於各變數間存在一定的相關關系,因此有可能用較少的綜合指標分別綜合存在於各變數中的各類信息。
主成分分析(Principal components analysis,以下簡稱PCA)是最重要的降維方法之一。在數據壓縮消除冗餘和數據噪音消除等領域都有廣泛的應用。
PCA的思想是將n維特徵映射到k維上(k<n),這k維是全新的正交特徵。這k維特徵稱為主元,是重新構造出來的k維特徵,而不是簡單地從n維特徵中去除其餘n-k維特徵。
如圖。我們希望找到某一個維度方向,它可以代表這兩個維度的數據。圖中列了兩個向量方向,u1和u2,那麼哪個向量可以更好的代表原始數據集呢?從直觀上也可以看出,u1比u2好。
為什麼u1比u2好呢?可以有兩種解釋,第一種解釋是樣本點到這個直線的 距離足夠近 ,第二種解釋是樣本點在這個直線上的 投影能盡可能的分開 。
假設三維空間中有一系列點,這些點分布在一個過原點的斜面上,如果你用自然坐標系x,y,z這三個軸來表示這組數據的話,需要使用三個維度,而事實上,這些點的分布僅僅是在一個二維的平面上,那麼,問題出在哪裡?如果你再仔細想想,能不能 把x,y,z坐標系旋轉一下 ,使數據所在平面與x,y平面重合?這就對了!如果把旋轉後的坐標系記為x',y',z',那麼這組數據的表示只用x'和y'兩個維度表示即可!認為把數據降維後並沒有丟棄任何東西,因為這些數據在平面以外的第三個維度的分量都為0,即z'的坐標為0。假設這些數據在z'軸有一個很小的抖動,那麼我們仍然用上述的二維表示這些數據,理由是我們可以認為這兩個軸x'和y'的信息是數據的主成分,而這些信息對於我們的分析已經足夠了,z'軸上的抖動很有可能是雜訊。
內積運算:
內積的幾何意義:
注意這里我們專門區分了矢量長度和標量長度,標量長度總是大於等於0,值就是線段的長度;而矢量長度可能為負,其絕對值是線段長度,而符號取決於其方向與標准方向相同或相反。
A與B的內積等於A到B的投影長度乘以B的模。再進一步,如果我們假設B的模為1,即讓|B|=1|B|=1,那麼就變成了:
則內積幾何意義:設向量B的模為1,則A與B的內積值等於A向B所在直線投影的矢量長度!
(1)什麼是基?
如上圖,我們經常用線段終點的點坐標表示向量,例如上面的向量可以表示為(3,2)。但是 只有一個(3,2)本身是不能夠精確表示一個向量的 。這里的3實際表示的是向量在x軸上的投影值是3,在y軸上的投影值是2,我們隱式把以x軸和y軸上正方向長度為1的向量為標准,即基為(1,0)和(0,1)。因為它們分別是x和y軸正方向上的單位向量,因此就使得二維平面上點坐標和向量一一對應,非常方便。
所以,要准確描述向量,首先要確定一組基,然後給出基所在的各個直線上的投影值,進而確定坐標值。
(2)什麼是基變換?
實際上任何兩個線性無關的二維向量都可以成為一組基,所謂線性無關在二維平面內可以直觀認為是兩個不在一條直線上的向量。例如:(1,1)和(-1,1)也可以成為一組基。
一般來說,我們希望基的模是1,因為從內積的意義可以看到,如果基的模是1,那麼就可以方便的用向量點乘基而直接獲得其在新基上的坐標了!實際上,對應任何一個向量我們總可以找到其同方向上模為1的向量,只要讓兩個分量分別除以模就好了。則(1,1)和(-1,1)同方向上模為1的新基為:
(3)用矩陣表示基變換
將(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列變換後的結果 。
最後,上述分析同時給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去。更抽象的說,一個矩陣可以表示一種線性變換。
上面我們討論了選擇不同的基可以對同樣一組數據給出不同的表示,而且如果基的數量少於向量本身的維數,則可以達到降維的效果。但是我們還沒有回答一個最最關鍵的問題:如何選擇基才是最優的。或者說,如果我們有一組N維向量,現在要將其降到K維(K小於N),那麼我們應該如何選擇K個基才能最大程度保留原有的信息?看下圖:
那麼如何選擇最優基這個問題被形式化為:尋找一個一維基,使得所有數據變換為這個基上的坐標表示後,方差值最大。
至此我們知道一下幾點:
對原始數據進行(線性變換)基變換可以對原始樣本給出不同的表示;
基的維度小於數據的維度可以起到降維的效果;
對基變換後的新樣本求其方差,選取使其方差最大的基作為最優基。
對於上面二維降成一維的問題來說,找到那個使得方差最大的方向就可以了。不過對於更高維,還有一個問題需要解決。考慮三維降到二維問題。與之前相同,首先我們希望找到一個方向使得投影後方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。如果我們還是單純只選擇方差最大的方向,很明顯,這個方向與第一個方向應該是「幾乎重合在一起」,顯然這樣的維度是沒有用的,因此,應該有其他約束條件。從直觀上說,讓兩個欄位盡可能表示更多的原始信息,我們是不希望它們之間存在(線性)相關性的,因為相關性意味著兩個欄位不是完全獨立,必然存在重復表示的信息。
至此,我們得到了降維問題的優化目標:將一組N維向量降為K維(K大於0,小於N),其目標是選擇K個單位(模為1)正交基,使得原始數據變換到這組基上後,各欄位兩兩間協方差為0,而欄位的方差則盡可能大(在正交的約束下,取最大的K個方差)。
推廣到一般情況:
(1)拉格朗日法
(2) 奇異值分解法(SVD)
在PCA降維過程中,當進行協方差矩陣上求解特徵值時,如果面對維度高達10000*10000 ,可想而知耗費的計算量程平方級增長。面對這樣一個難點,從而引出奇異值分解(SVD),利用SVD不僅可以解出PCA的解,而且無需大的計算量。
PCA演算法的主要優點有:
1、僅僅需要以方差衡量信息量,不受數據集以外的因素影響。
2、各主成分之間正交,可消除原始數據成分間的相互影響的因素。
3、計算方法簡單,主要運算是特徵值分解,易於實現。
PCA演算法的主要缺點有:
1、主成分各個特徵維度的含義具有一定的模糊性,不如原始樣本特徵的解釋性強。
2、方差小的非主成分也可能含有對樣本差異的重要信息,因降維丟棄可能對後續數據處理有影響。
⑺ PCA降維原理
維基網路介紹:主成分分析(英語:Principal components analysis,PCA)是一種分析、簡化數據集的技術。主成分分析經常用於減少數據集的維數,同時保持數據集中的對方差貢獻最大的特徵。
說了和沒說一樣……我們還是通過一個簡單的案例引出PCA的作用吧。
如果我們在6個小鼠樣本中檢測一個基因 Gene1 的表達
我們很容易看出來,基因 Gene1 在小鼠1-3中表達比較相似,而在小鼠4-6中表達比較相似
如果同時檢測兩個基因
我們可以將不同小鼠樣本標記在二維坐標軸中,並且看出小鼠1-3的整體表達比較相似,而小鼠4-6的整體表達比較相似
將基因數目擴增到3個時候,我們依然可以通過三維坐標軸標記出不同樣本的分布
但是如果將基因數目增加到4個或4個以上時候,很難繼續增加坐標軸的維度來繪圖(思維空間已經超出一般人的認知了)。
所以 我們可以通過PCA的降維方法來處理這種4維或者多維數據,將其繪制為二維圖像來比較不同樣本之間的關系 。
PCA是如果進行降維的呢?
首先我們只檢測6個不同小鼠的2個基因,那麼我們可以分別計算出所有小鼠 Gene1 和 Gene2 的平均值(紅色叉號)。根據這些均值,可以獲得所有數據的中心(藍色叉號)。
然後我們將數據整體移動,數據的中心於原點重合。雖然所有的數據點都移動了,但是每個數據點的相對距離沒有改變,只是數據的中心變為原點 (0,0) 。
接下來,我們會繪制一條通過原點的直線。這條直線可以360°旋轉,直至同數據匹配最佳。
那麼如何判斷 最佳匹配 呢?這個標準是——
PCA將所有的數據點投射到這條直線上,並且計算這些數據點投射到直線上的距離(使這些距離最小)和投射點到原點的距離(使這些距離最大)
實際上計算c會簡單一些,所以PCA一般是通過計算所有數據點到原點距離平方和sum( )最大值來尋找最優解。
如下圖所示,分別將這6個樣本的投射點到原點距離標記為d1,d2,...,d6,然後計算這些點的平方和,這些平方和也被稱為SS距離,即 。
獲得SS最大值時的這條線,被稱為 PC1 。假設PC1這條線的斜率為0.25,這意味著每當我們在 Gene1 前進4個單位時,PC1上的數據點在 Gene2 上就增加1個單位。
這也意味著這幾個樣本在 Gene1 上更加分散,而在 Gene2 上分散程度較小。
根據雞尾酒配方來思考PC1,為生成PC1,我們加入了4份 Gene1 和1份 Gene2 ,這也說明在描述數據的分散程度方面, Gene1 更加重要。
在數學上,這種雞尾酒配方被稱為 Gene1 和 Gene2 的線性組合,或也可以說「PC1是幾個變數的線性組合」。
在PCA中,將SS稱為PC1的 特徵值 (Eigenvalue);PC1特徵值的平方被稱為PC1的 奇異值 (Singular Value)。
根據上面的假設,PC1的斜率為0.25,如果下圖的紅色箭頭是一個長度單位,那麼它是有0.97個Gene1和0.242個Gene2構成,所以 被稱為 特徵向量 (Eigenvector)或奇異向量(Singular vector)。
而每個基因的比例,被稱為PC1的 載荷分數 (loading score)
在二維坐標中,PC2是一條通過原點,並且與PC1 垂直 的直線。
很容易計算出PC2的斜率為-4,那麼PC2就是由-0.242個Gene1和0.97個Gene2構成了。
同時,我們也可以計算出PC2的特徵值。
旋轉坐標軸,將PC1水平,PC2垂直。黑色叉表示原始的樣本6,那麼在新的坐標系中,Sample6的分布如下圖所示。
各個主成分的變異度(Variation)計算,方法是SS除以樣本減1。
假如上面那個案例中PC1變異度為15,PC2的變異度為3,那麼總變異度為18.
因此PC1在總變異中所佔的比值為83%,PC2占的總變異為17%。
如果我們有3個基因,根據前面描述的步驟,分別找出PC1、PC2(垂直於PC1)和PC3(同時垂直於PC1和PC2),
同時也可以計算出各個主成分的變異度。
在上面的案例中,只使用PC1和PC2可以解釋94%的變異度,所以我們只保留PC1和PC2最終繪圖
這樣,我們就獲得了最終降維之後的結果。
在進行PCA降維之前,需要確保所有數據處於同一標准下。
例如下面這組數據,Math分數是按照百分制統計,而Reading分數是按照十分制統計。
那麼我們在計算PC1時可能會得到PC1由0.99個Math和0.1個Reading組成,但是這僅僅是由於Math分數本身就是Reading分數的10倍。
所以我們需要 首先將每一個變數除以其所在組的標准差進行標准化處理 。
上面的那個案例中,我們只有兩組觀測數據。
繪制完PC1和PC2後,還可以繪制出PC3嗎?
根據之前的講述,PC3是同時垂直於PC1和PC2的。
那麼繪制PC3時,基於已有的數據,先去尋找垂直於PC1的直線,只會得到PC2。
尋找垂直於PC2的直線,也只會得到PC1。
所以無法繪制出PC3。
如果上面的案例中,Math和Reading是100%相關的.
繪制完PC1後,繪制一條垂直於PC1的PC2時發現,所有的數據投射在PC2的點都是原點,即特徵值為0。
這時,PC1能夠100%解釋所有的變異。所以此時僅有PC1一個主成分。
如果學生數目減少為2,那麼數據的分布在二維平面只有2個點,
2個點僅可以構成一條直線,所以PC2的特徵值必然為0。
即使增加一個觀測指標Gym,如果只有兩個學生的話,最終數據在三維空間只有兩個點,所以也只會有一個主成分PC1。
擴展一下,如果數據變為3個學生和3個觀測指標,最終會有幾個主成分呢?
3個學生會產生3個數據點,3點構成一個平面(平面是二維的),所以PC3的特徵值必然為0。
因此會產生2個主成分PC1和PC2。
所以, 一組數據進行降維分析時,主成分數最終等於變數數目或樣本數目(二者較小的那個),但是上限是特徵值大於0的PC數 。
⑻ (十)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
⑼ 主成分分析(PCA)& 主坐標分析(PCoA)——R包繪圖(2D/3D散點圖)
主成分分析(Principal Components Analysis,PCA) ,也稱主分量分析或主成分回歸分析法,是一種無監督的數據降維方法。PCA通過線性變換將原始數據變換為一組各維度線性無關的表示,可用於提取數據的主要特徵分量,常用於高維數據的 降維 。這種降維的思想首先減少數據集的維數,同時還保持數據集的對方差貢獻最大的特徵,最終使數據直觀呈現在二維坐標系。
主坐標分析(Principal Coordinates Analysis,PCoA) ,即經典多維標度(Classical multidimensional scaling),用於研究數據間的相似性。
【二者差異】
PCA與PCoA都是降低數據維度的方法,但是差異在在於 PCA 是基於 原始矩陣 ,而 PCoA 是基於通過原始矩陣計算出的 距離矩陣 。因此,PCA是盡力保留數據中的變異讓點的位置不改動,而PCoA是盡力保證原本的距離關系不發生改變,也就是使得原始數據間點的距離與投影中即結果中各點之間的距離盡可能相關。
基因表達量數據通過RSEM軟體定量後得到
除轉錄組研究以外,在16S微生物的研究中我們會根據物種豐度的文件對數據進行PCA或者PCoA分析,也是我們所說的β多樣性分析。根據PCA或者PCoA的結果看感染組和對照組能否分開,以了解微生物組的總體變化情況。
具體內容及繪圖方法可參考下面這篇文章。
16s—β多樣性分析(R畫三維PCoA圖)
R數據可視化4: PCA和PCoA圖
詳解主成分分析PCA