主成分分析(PCA)與矩陣奇異值分解(SVD)原理

內(nèi)容概要:

  1. 矩陣奇異值分解SVD
  2. 主成分分析PCA及其應(yīng)用
  3. SVD與PCA之間的關(guān)系

1 矩陣奇異值分解SVD

1.1 矩陣奇異值分解的數(shù)學(xué)原理

在關(guān)于SVD(Singular Value Decomposition)的講解中將涉及稍微多一點的數(shù)學(xué)推導(dǎo)。
定義:設(shè)A是秩為rm×n矩陣束凑,n階對稱方陣A^TA的特征值為\lambda_i (i=1,2,...,n),且有

\lambda_1\geq\lambda_2\geq...\geq\lambda_r>0亩鬼,\lambda_{r+1}=\lambda_{r+2}=...=\lambda_{n}=0

則稱

\sigma_i=\sqrt{\lambda_i}

為矩陣A的奇異值。
奇異值分解定理:設(shè)A是秩為rm×n矩陣蝗蛙,則存在m階正交矩陣Un階正交矩陣V蚜厉,使得

A=U \Sigma V^T

其中m×n矩陣\Sigma的分塊形式為

\Sigma= \left( \begin{array}{ccc} D & 0 \\0 & 0 \end{array} \right)

D為A的奇異值\sigma_i構(gòu)成的對角矩陣。
下面我們來證明這個定理技俐,并從這個過程中理解U, \Sigma统台, V^T代表的含義雕擂。
證明A^TA是一個實對稱矩陣,且有rank(A)=rank(A^TA)贱勃,故存在n階正交矩陣V井赌,使得

V^TA^TAV=diag(\lambda_1,\lambda_1,...,\lambda_r,0,...,0)=\Sigma^2

其中

V=(v_1,v_2,...,v_r,|v_{r+1},...,v_n)=(V_1,V_2)

于是

V_1^TA^TAV_1=D^2,V_2^TA^TAV_2=0

因此有

D^{-1}V_1^TA^TAV_1D^{-1}=E

U_1=AV_1D^{-1},則上式即為U^TU=E贵扰,故U的列向量是單位正交向量組仇穗,將U_1擴充為U=(U_1|U_2),則有

U\Sigma V^T=(U_1,U_2) \left(\begin{array}{ccc} D & 0 \\0 & 0 \\ \end{array}\right) \left(\begin{array}{ccc} V_1^T \\ V_2^T \\ \end{array}\right) =U_1DV_1^T=A

證畢戚绕。
下面我們來探索一下奇異值分解中各個量的含義纹坐,首先:

||Av_i||^2=(Av_i)^T(Av_i)=v_i^T(A^TAv_i)=v_i^T\lambda_iv_i=\lambda_i||v_i||^2

于是

||Av_i||=\sigma_i

這表示A對矩陣V的分量作用后,得到的就是相應(yīng)的奇異值舞丛。
另外耘子,\left\{Av_i|Av_i\neq0\right\}A的列向量空間的一組正交基,證明如下:
首先(Av_i)^T(Av_j)=v_i^T(A^TAv_i)=0球切,這證明了其正交性谷誓。另外,設(shè)

A=(\alpha_1,\alpha_2,...,\alpha_n)

向量

y=Ax=x_1\alpha_1+x_2\alpha_2+...+x_n\alpha_n

由于\left\{v_i\right\}n維空間的一組標準正交基吨凑,故

x=k_1v_1+k_2v_2+...+k_nv_n

于是

y=Ak_1v_1+Ak_2v_2+...+Ak_nv_n=k_1Av_1+k_2Av_2+...+k_nAv_n=\\k_1Av_1+k_2Av_2+...+k_rAv_r+0+...+0

這表明片林,任何一個可由A的列向量組線性表出的向量同樣可以由\left\{Av_i|Av_i\neq0\right\}線性表出。故\left\{Av_i|Av_i\neq0\right\}A的列向量空間的一組正交基怀骤。
又由于||Av_i||=\sigma_i,則\left\{ \frac{Av_i}{\sigma_i}|Av_i\neq0 \right\}其實就是A的列空間的一組標準正交基焕妙,而U_1正是由這組標準正交基組成的矩陣蒋伦。

1.2 SVD分解實例

設(shè)有矩陣
A= \left( \begin{array}{ccc} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{array} \right)

試對其進行奇異值分解。
這里就不用手計算了(這個矩陣編的焚鹊,懶得算了)痕届,我們使用numpyscipy來幫助計算韧献,同樣也用其中的矩陣乘法來驗證分解的正確性。

import numpy as np
from scipy.linalg import svd
A = np.array([
    [1,2],
    [3,4],
    [5,6]
])
U, s, VT = svd(A)

注意中間的我用的是小寫s研叫,因為scipy計算SVD分解結(jié)果的Sigma矩陣返回的是非零奇異值列表锤窑,而不是真正的Sigma矩陣。

SVD分解

驗證分解的正確性即驗證
U.Sigma.VT=A

#先將s轉(zhuǎn)化為Sigma矩陣
Sigma = np.zeros(A.shape)
for i in range(len(s)):
    Sigma[i][i] = s[i]
#print(Sigma)
# 驗證
print(U.dot(Sigma).dot(VT))
驗證

可見分解是正確的嚷炉。

2 主成分分析

主成分分析(Principal Component Analysis )是迄今為止機器學(xué)習(xí)領(lǐng)域最流行的降維算怯渊啰。它先是找出最接近數(shù)據(jù)特征的超平面,然后將數(shù)據(jù)投影其上申屹,以達到降維目的绘证。這樣說還是有點抽象,下面一步一步來講解PCA的數(shù)學(xué)原理哗讥,用數(shù)學(xué)知識推導(dǎo)一遍PCA嚷那。

2.1 向量與內(nèi)積

首先來看一個中學(xué)就學(xué)過的向量內(nèi)積運算:

內(nèi)積

兩個向量的內(nèi)積定義為:

a ? b = |a||b|cosθ

這樣的內(nèi)積有什么含義呢?下面將內(nèi)積換一種寫法:

a ? b =( |a|cosθ)|b|

可以看到向量ab的內(nèi)積結(jié)果為ab上投影的長度再乘以b的模杆煞,如果讓b的模為1魏宽,則:

a ? b =|a|cosθ

即當(dāng)b模為1時,ab的內(nèi)積就是ab上投影的長度决乎。
推廣至n維空間队询,這樣,當(dāng)b為某組單位正交基中的一個時瑞驱,ab的內(nèi)積就是a在該單位正交基上投影的長度娘摔。也就是相應(yīng)基方向上的坐標。

2.2 基唤反、坐標及其變換的矩陣表示

下面繼續(xù)討論凳寺,為了方便,我們以二維平面中的點或向量為例彤侍。

坐標

在上圖中肠缨,假設(shè)點(向量)的坐標為,這表示點(向量)在軸的投影距離原點為個單位長度盏阶,在軸的投影距離原點個單位長度晒奕,可見坐標其實是被我們賦予了含義的,顯式表示這層含義名斟,點可以表示為:

2 \begin{pmatrix} 1 \\ 0 \end{pmatrix} +4\begin{pmatrix} 0 \\ 1 \end{pmatrix}

二維平面中的所有坐標(x,y)都可以表示為:

x\begin{pmatrix} 1 \\ 0 \end{pmatrix}+y\begin{pmatrix} 0 \\ 1 \end{pmatrix}

這里\begin{pmatrix}1 \\ 0 \end{pmatrix}\begin{pmatrix} 0 \\ 1 \end{pmatrix}就是二維平面的一組基脑慧,為了表示二維平面的一個向量,首先要確定一組基砰盐,然后給出在基所在的各個直線上的投影值闷袒,也就是坐標,不過由于平時見到的幾乎都是平面直角坐標系中岩梳,于是都默認\begin{pmatrix} 1 \\ 0 \end{pmatrix}\begin{pmatrix} 0 \\ 1 \end{pmatrix}為基囊骤。
實際上晃择,任意兩個線性無關(guān)的向量都可以作為二維平面的一組基。不過為了研究問題的方便也物,一般我們希望基向量的墓溃可以是1,而且如果是一組基滑蚯,它們之間最好是兩兩正交的浪蹂,因為投影得到各個基方向的坐標的投影方式都是垂直投影,這樣的基有非常良好的性質(zhì)膘魄。從前面對內(nèi)積的探討中也可以看出乌逐,選用模為1的基向量,我們的原向量坐標只需與新選取的基做內(nèi)積運算就可以得到該向量在新基下的坐標创葡,理解了這一點對理解下面推導(dǎo)PCA原理非常重要浙踢。
如我們選取標準正交基(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})^T(-\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}})^T,則(2,4)在這組基下的坐標不難通過內(nèi)積計算得到(\frac{6}{\sqrt{2}},\frac{2}{\sqrt{2}})灿渴,圖示如下:

坐標變換

為了表示方便洛波,我們使用矩陣這一數(shù)學(xué)工具,將坐標變換表示為矩陣形式:

(2, 4) \begin{pmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{pmatrix} = (\frac{6}{\sqrt{2}},\frac{2}{\sqrt{2}})

而且還能同時計算多個坐標變換后的結(jié)果:

\left( \begin{array}{ccc} 4 & 1 \\ 2 & 3 \\ 1 & 2 \\ \end{array} \right) \begin{pmatrix}\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{pmatrix} =\begin{pmatrix} \frac{5}{\sqrt{2}} & -\frac{3}{\sqrt{2}} \\ \frac{5}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{3}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{pmatrix}
其中等號左側(cè)左邊矩陣的行向量為直角坐標系下的坐標骚露,基(列向量)拼接為變換矩陣蹬挤,乘法的結(jié)果矩陣就是原直角坐標在新基下變換后的坐標。如果我們不取這組基中全部的基向量(這里二維情形我們只取一個)棘幸,這個乘法(內(nèi)積)操作就相當(dāng)于只在這個基上做了投影:

\left( \begin{array}{ccc}4 & 1 \\ 2 & 3 \\ 1 & 2 \\ \end{array} \right) \begin{pmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{pmatrix} =\begin{pmatrix} \frac{5}{\sqrt{2}} \\ \frac{5}{\sqrt{2}} \\ \frac{3}{\sqrt{2}} \end{pmatrix}

如果把各個坐標看做是特征矩陣中的某個數(shù)據(jù)項焰扳,這便達到了降維的目的,上面的例子是把二維特征降維到了一維误续。(注意:與數(shù)學(xué)中維度考慮秩不同吨悍,我們這里說的特征維度指的是特征的個數(shù)。)
更一般地蹋嵌,設(shè)有特征矩陣X_{m×n}育瓜,其中m表示數(shù)據(jù)項的個數(shù),n表示每個數(shù)據(jù)項擁有的特征個數(shù)栽烂,想將其降維為Y_{m×r}躏仇,只需要乘以行數(shù)等于n列數(shù)等于r的變換矩陣P_{n×r}

X_{m×n}?P_{n×r}=Y_{m×r}

注意這里的r可以小于nr的大小就決定了原特征矩陣變換后的特征維度腺办。也就是說我們可以把原本高維的特征變換到低緯度空間去研究焰手,當(dāng)然前提是不損失特征包含的信息。
從上述分析中也可以看到怀喉,兩個矩陣相乘的意義是將左邊矩陣中的每一個行向量變換到右邊矩陣中以列向量為一組基所表示的空間中去册倒,當(dāng)然實際上也可以看做對右邊矩陣中列向量的變換,不過這里討論PCA磺送,為了遷就特征矩陣表示上的習(xí)慣使用了這一方式驻子。

2.3 PCA降維問題的優(yōu)化目標

通過上面的討論我們知道可以選取新的基對數(shù)據(jù)重新進行表示,當(dāng)基的數(shù)目小于原特征數(shù)目時便可以達到數(shù)據(jù)降維的目的估灿,不過降維后的數(shù)據(jù)應(yīng)盡可能保留原數(shù)據(jù)中的信息崇呵,這樣的降維才有意義,現(xiàn)在的問題就是我們怎么選取一組基才能將數(shù)據(jù)降維并盡量保持原數(shù)據(jù)中的信息呢馅袁?要數(shù)學(xué)化這個問題并不那么簡單域慷,為了避免滿篇數(shù)學(xué)公式的推導(dǎo),我們用一個具體的例子汗销,設(shè)有5個數(shù)據(jù)項2個特征的特征矩陣如下:

\left( \begin{array}{ccc} 1 & 1\\ 1 & 3\\ 2 & 3\\ 4 & 4\\ 2 & 4 \end{array} \right)

為了后續(xù)處理方便犹褒,先將這組數(shù)據(jù)進行中心化,也就是讓每個特征的均值為0弛针,這只需特征的每個數(shù)據(jù)減去他們當(dāng)前的均值叠骑,這里第一個特征均值為2,第二個特征均值為3削茁,于是將特征矩陣處理為:

\left( \begin{array}{ccc} -1 & -2 \\ -1 & 0 \\ 0 & 0 \\ 2 & 1\\ 0 & 1 \end{array} \right)

這樣處理的好處我們會在后面看到≈婕希現(xiàn)在將這組數(shù)據(jù)在二維直角坐標系中畫出來:

特征可視化

現(xiàn)在要對這組數(shù)據(jù)進行特征降維,一個直觀的想法是投影到x軸茧跋,也就是只取數(shù)據(jù)x軸的坐標(只保留一個特征)慰丛,不過此時我們發(fā)現(xiàn)有數(shù)據(jù)點重合,原本不同的數(shù)據(jù)無法再區(qū)分出來瘾杭,這個降維方案是失敗的诅病。顯然我們應(yīng)該選擇某個投影方向,使得數(shù)據(jù)點在該方向投影后(降維后)有最大的區(qū)分度粥烁,也就是投影后數(shù)值盡可能在該方向軸上分散贤笆。如將其投影到方向(1,1) (一三象限角平分線)上貌似就是個不錯的選擇:

投影

在數(shù)學(xué)上我們有對這種分散程度更精確的刻畫,這種刻畫就是方差页徐。

2.3.1 方差與協(xié)方差

某個特征(特征矩陣的某一列)的方差計算公式為:

var(x)=\frac{1}{m}\sum_{i=1}^{m}(x_i-\overline{x})^2

其中m為數(shù)據(jù)項個數(shù)苏潜,\overline{x}為他們的樣本均值。
需要指出的是变勇,在統(tǒng)計學(xué)上恤左,樣本方差計算是除以m-1的,這是為了保證樣本方差是總體方差的無偏估計搀绣,不過在機器學(xué)習(xí)中大樣本情況下差別不大飞袋,所以本文討論中都采取除以m這種簡單的寫法。
實際運用中链患,都先把數(shù)據(jù)中心化巧鸭,均值\overline{x}=0,這樣方差計算將簡便的多:

var(x)=\frac{1}{m}\sum_{i=1}^{m}x_i^2

于是上述二維降一維的問題就轉(zhuǎn)化為麻捻,尋找一個一維基纲仍,使得特征數(shù)據(jù)變換為這個基上的坐標表示后呀袱,方差值最大。
那如果是更高維的特征呢郑叠,現(xiàn)在考慮三維降二維問題夜赵。與之前相同,首先我們希望找到一個方向使得投影后方差最大乡革,這樣就完成了第一個方向的選擇寇僧,接著我們選擇第二個投影方向。如果我們還是單純只選擇方差最大的方向沸版,很明顯嘁傀,這個方向與第一個方向應(yīng)該是“幾乎重合在一起”,顯然這樣的維度是沒有用的视粮,因此细办,應(yīng)該有其他約束條件。從直觀上說馒铃,讓兩個特征盡可能表示更多的原始信息蟹腾,我們是不希望它們之間存在(線性)相關(guān)性的,因為相關(guān)性意味著兩個特征不是完全獨立区宇,存在重疊表示的信息娃殖。數(shù)學(xué)上可以用兩個字段的協(xié)方差表示其相關(guān)性:

cov(a,b)=E(ab)-EaEb

由于我們已經(jīng)讓特征ab的均值為0,于是:

cov(a,b)=E(ab)=\frac{1}{m}\sum_{i=1}^{m}a_{i}b_{i}

當(dāng)協(xié)方差為0時议谷,表示兩個字段完全不相關(guān)炉爆。為了讓協(xié)方差為0,我們選擇的第二個基時只能在與第一個基正交的方向上選擇卧晓。因此最終選擇的兩個方向一定是正交的芬首。于是三維降二維的最優(yōu)化問題便轉(zhuǎn)化為尋找兩個互相正交的基,使得原始三維特征變換到二維特征后逼裆,特征間協(xié)方差為0郁稍,而特征內(nèi)的方差值則盡可能大。
至此我們不難得到更一般的降維問題的最優(yōu)化目標:將一組n維特征降維為r維胜宇,其目標是選擇一組r個單位正交基耀怜,使得原始數(shù)據(jù)變換到這組基上后,各特征間兩兩協(xié)方差為0桐愉,而特征內(nèi)的方差則盡可能大(在正交的約束下财破,取最大的r個方差)。

2.3.2 協(xié)方差矩陣及其對角化

在上面的討論中我們看到从诲,我們要達到的最優(yōu)化目標與特征間協(xié)方差和特征內(nèi)方差都有密切關(guān)系左痢,如何將它們統(tǒng)一表示呢,那就是協(xié)方差矩陣,協(xié)方差矩陣的(i,j)位置是特征ij的協(xié)方差俊性,(i,i)位置是特征i自身的方差略步,由于已經(jīng)事先讓各個特征均值為0,無論方差還是協(xié)方差都是向量內(nèi)積的形式定页,設(shè)原特征矩陣經(jīng)過降維變換后的矩陣為Y纳像,此時協(xié)方差矩陣其實就是:

D=\frac{1}{m}Y^TY

原特征對應(yīng)的協(xié)方差矩陣:
C=\frac{1}{m}X^TX

那么DC有什么關(guān)系呢?下面我們就來計算一下拯勉,由于Y是特征降維后的矩陣,故D一定是對角矩陣(協(xié)方差為0)憔购,于是:

D=\frac{1}{m}Y^TY = \frac{1}{m}(XP)^T(XP) = \frac{1}{m}P^TX^TXP=P^TCP

這下事情清楚了宫峦,我們要找的一組正交基組成的變換矩陣P正是可以使得原協(xié)方差矩陣C對角化所對應(yīng)的正交矩陣。而原協(xié)方差矩陣C=X^TX是一個實對稱矩陣玫鸟,實對稱矩陣擁有非常良好的性質(zhì):

  1. 實對稱矩陣一定可以對角化导绷;
  2. 實對稱矩陣不同特征值對應(yīng)的特征向量互相正交;
  3. 實對稱矩陣的k重特征值對應(yīng)k個線性無關(guān)的特征向量屎飘;

我們可以通過實對稱矩陣對角化理論求出我們需要的變換矩陣妥曲。
原特征矩陣C對角化后的矩陣D的對角線元素正是C的特征值(設(shè)這些特征值按從大到小的順序排列),由上面我們知道這里的特征值就是變換后各特征的方差钦购,其含義就是將原數(shù)據(jù)投影到該特征值對應(yīng)的特征向量方向后檐盟,新數(shù)據(jù)的重要程度,方差越大則數(shù)據(jù)越重要押桃。
一般我們只取P的前rP_{n×r}葵萎,代表變換后前r個最重要的特征所在的方向,而丟棄剩下的列

X_{m×n}?P_{n×r}=Y_{m×r}

這便達到了降維的效果唱凯。
以上就是PCA的原理羡忘。怎么樣,夠清晰吧磕昼。

2.4 PCA降維在手寫數(shù)字數(shù)據(jù)集應(yīng)用實例

接下來卷雕,用一個機器學(xué)習(xí)實例來看一下PCA的強大之處。
我們使用手寫數(shù)字數(shù)據(jù)集票从,這個數(shù)據(jù)集共有42000個樣本漫雕,每個樣本都擁有784個特征(每個樣本就是一張28×28的手寫數(shù)字圖像)。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = pd.read_csv("digit recognizor.csv")
X = data.iloc[:,1:]
y = data.iloc[:,0]
X.shape # (42000,784)

可視化一部分樣本(40個)

def plot(mnist):
    fig, axes = plt.subplots(4,10,figsize=(10,4),subplot_kw={'xticks':[],'yticks':[]},
                            gridspec_kw=dict(hspace=0.1,wspace=0.1))
    for i,ax in enumerate(axes.flat):
        ax.imshow(mnist[i].reshape(28,28),cmap='binary')
    plt.show()
X_mnixt_example = X[:40]
X_mnixt_example = np.array(X_mnixt_example, dtype='int32')# 整理成numpy格式數(shù)據(jù)
plot(X_mnixt_example)# 調(diào)用函數(shù)畫圖
mnist

接著用KNN算法訓(xùn)練一遍原數(shù)據(jù)集纫骑,使用交叉驗證評價其表現(xiàn):

# Time using 1.5h
from sklearn.neighbors import KNeighborsClassifier as KNN
cross_val_score(KNN(5), X, y, cv=5, n_jobs=-1).mean() # 98.3%

KNN雖然簡單但卻也是非常強大的機器學(xué)習(xí)算法蝎亚,不過由于其每次計算往往都要遍歷全部樣本,這樣當(dāng)數(shù)據(jù)特別多先馆,數(shù)據(jù)維度特別大時將非常消耗時間发框。對于KNN這樣的分類器,我們希望在提升模型表現(xiàn)和訓(xùn)練模型時間消耗上達到一個均衡。這也正是降維的意義之一梅惯。
可以看到KNN算法在5折交叉驗證下在數(shù)據(jù)集上達到平均98.3\%的準確率宪拥。但是時間消耗為1.5小時,這是因為數(shù)具量實在太大铣减,當(dāng)然也和KNN這種算法有關(guān)她君。同樣的數(shù)據(jù)在隨機森林上只需10分鐘左右。不過這里為了展示PCA的強大之處葫哗,使用了KNN缔刹。
接下來用PCA對數(shù)據(jù)進行降維,為了能有更好的降維效果劣针,首先繪制維度的學(xué)習(xí)曲線校镐,大致確定一個不至于使模型表現(xiàn)太壞的維度。由于數(shù)據(jù)有一定的穩(wěn)定性捺典,在RF表現(xiàn)好的數(shù)據(jù)在KNN也極大可能會表現(xiàn)好鸟廓,為了效率先用RF分類器作訓(xùn)練來繪制維度的學(xué)習(xí)曲線:

score = []
for i in range(1,101,10):
    X_dr = PCA(i).fit_transform(X)
    once = cross_val_score(RFC(n_estimators=10,random_state=0) ,X_dr,y,cv=5).mean()
    score.append(once)
plt.figure(figsize=[20,5])
plt.plot(range(1,101,10),score)
plt.show()
學(xué)習(xí)曲線

可以發(fā)現(xiàn)維度在10之后對準確率的提升已經(jīng)很小了。我們選取降維到21(784->21)襟己。這里需要解釋的是引谜,在RF上準確率僅在91\%上下,是因為我們沒有對RF進行調(diào)參擎浴,如果增加其中決策樹的數(shù)量是可以看到準確率在93\%以上的员咽,另外,每種模型往往也都有自己更擅長的數(shù)據(jù)集退客,RF也許對這種數(shù)據(jù)就不太擅長骏融。接下來再在KNN上看一下降維數(shù)據(jù)的表現(xiàn),由于數(shù)據(jù)已降維到21萌狂,相比之前運算量已大幅下降档玻,故使用KNN也是可以的:

# Time using 5min
X_dr = PCA(21).fit_transform(X)
X_dr.shape #(42000, 21)
cross_val_score(KNN(5), X_dr, y, cv=5, n_jobs=-1).mean()
準確率

可以看到雖然準確率不如使用全部數(shù)據(jù),但也達到了97\%茫藏,原數(shù)據(jù)有784個維度误趴,而我們只使用了降維的21維度數(shù)據(jù)就有接近原數(shù)據(jù)的效果!這就是PCA的強大之處务傲。


3 PCA與SVD之間的關(guān)系

我們經(jīng)常聽到別人說PCA的求解用到了SVD分解凉当,這是什么意思呢?首先我們來看二者之間的關(guān)系售葡。
PCA的求解中
X_{m×n}?P_{n×r}=Y_{m×r}
變換矩陣P_{n×n}是原特征矩陣的協(xié)方差矩陣X^TX的正交特征向量按列拼成的矩陣看杭。而在SVD分解中
A=U \Sigma V^T
矩陣VA^TA的正交特征向量按列組成的矩陣。
這下我們知道了挟伙,若A=X楼雹,那么SVD分解中的正交矩陣V正是PCA中的正交矩陣P。這就是二者之間的數(shù)學(xué)關(guān)系。
SVD分解已經(jīng)有更快的數(shù)值解法了贮缅,不需要直接計算A^TA的特征值和特征向量(對于大矩陣如果這樣計算將會有非常非常大的計算量)榨咐,SVD可以不計算協(xié)方差矩陣等復(fù)雜的計算過程,就直接求出新特征空間和降維后的特征矩陣谴供。所以PCA的求解通常都是用SVD分解得到V(P)矩陣块茁。
例如在sklearn中,其封裝的PCA就是基于SVD求解的桂肌,而矩陣UΣ雖然會被計算出來数焊,但完全不會被用到。

from sklearn.decomposition import PCA
pca_f = PCA(n_components=0.97,svd_solver="full")
pca_f = pca_f.fit(X)
X_f = pca_f.transform(X)
pca_f.explained_variance_ratio_ #0.978

如上面一段代碼崎场,在n\_components位置輸入[0,1]之間的浮點數(shù)昌跌,并且讓參數(shù)svd\_solver ='full'(該參數(shù)就是指定SVD的計算方式的),表示希望降維后的總解釋性方差占比大于n\_components指定的百分比照雁,即是說,希望保留百分之多少的信息量答恶。PCA按照SVD分解過程會自動選出能夠讓保留的信息量超過我們指定百分比的特征數(shù)量饺蚊。

sklearnPCA



注:本文在解釋PCA原理部分的思路參考了知乎文章PCA的數(shù)學(xué)原理

參考文獻:
.
張賢達. 矩陣分析與應(yīng)用(第二版). 北京:清華大學(xué)出版社悬嗓,2013.
.
PCA的數(shù)學(xué)原理. 知乎文章. 鄭申海:https://zhuanlan.zhihu.com/p/21580949污呼,2016.
.
Aurélien Géron. Hands-On Machine Learning with Scikit-Learn and TensorFlow. Dimensionality Reduction

轉(zhuǎn)載請注明出處十办,謝謝合作赃春!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市路媚,隨后出現(xiàn)的幾起案子周瞎,更是在濱河造成了極大的恐慌苗缩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件声诸,死亡現(xiàn)場離奇詭異酱讶,居然都是意外死亡,警方通過查閱死者的電腦和手機彼乌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門泻肯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慰照,你說我怎么就攤上這事灶挟。” “怎么了毒租?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵稚铣,是天一觀的道長。 經(jīng)常有香客問我,道長榛泛,這世上最難降的妖魔是什么蝌蹂? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮曹锨,結(jié)果婚禮上孤个,老公的妹妹穿的比我還像新娘。我一直安慰自己沛简,他們只是感情好齐鲤,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著椒楣,像睡著了一般给郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧灰,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天淆九,我揣著相機與錄音,去河邊找鬼毛俏。 笑死炭庙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的煌寇。 我是一名探鬼主播焕蹄,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阀溶!你這毒婦竟也來了腻脏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤银锻,失蹤者是張志新(化名)和其女友劉穎永品,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體击纬,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡腐碱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掉弛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症见。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖殃饿,靈堂內(nèi)的尸體忽然破棺而出谋作,到底是詐尸還是另有隱情,我是刑警寧澤乎芳,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布遵蚜,位于F島的核電站帖池,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吭净。R本人自食惡果不足惜睡汹,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寂殉。 院中可真熱鬧囚巴,春花似錦、人聲如沸友扰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽村怪。三九已至秽浇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甚负,已是汗流浹背柬焕。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梭域,地道東北人击喂。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像碰辅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子介时,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容