标签: PCA 降维 特征值分解 奇异值分解
PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。
一、特征值和奇异值
二、主成分分析—PCA
正如字面上的意思,主成分分析,首先得找出所谓的"主成分",并且表示它,然后才能分析。
一个n维数据集,要找所谓的"主成分",不如说是找主成分所在的方向,也就是说找一个新的坐标系,然后把数据投影过去。
那么新的坐标系怎么找?
对于PCA来说,认为一个随机信号最有用的信息体包含在方差里。自然而然,我们希望信号在方差最大的维度作为我们的"主成分",方差小的维度的信号就可以看做是信息量小的或者不重要的数据,那么就可以丢弃。
假设m个n维随机信号 X = ( x 1 , x 2 , . . . , x m ) X=(x_1,x_2,...,x_m) X=(x1,x2,...,xm),存在一个坐标系 w T w^T wT。(信号 x x x各维度都减去了其均值)
对于一个一维向量来说,方差可以度量其包含的信息。对于一个矩阵,可以用协方差来表示:
那么容易得到信号
X
X
X的协方差:
S
=
1
n
X
X
T
S=\frac{1}{n}XX^T
S=n1XXT
投影后方差: S ′ = 1 n ( w T X ) 2 = 1 n w T X X T w = w T ( 1 n X X T ) w = w T S w S'=\frac{1}{n} (w^TX)^2=\frac{1}{n}w^TXX^Tw=w^T(\frac{1}{n}XX^T)w=w^TSw S′=n1(wTX)2=n1wTXXTw=wT(n1XXT)w=wTSw
要求方差
S
′
S'
S′最大,那么可以得到优化问题:
max
w
w
T
S
w
s
.
t
.
∣
∣
w
∣
∣
=
1
\max_{w}w^TSw\\s.t.||w||=1
wmaxwTSws.t.∣∣w∣∣=1
使用拉格朗日乘数法:
L
=
w
T
S
w
+
λ
(
1
−
w
T
w
)
∂
L
∂
w
=
2
S
w
−
2
λ
w
L=w^TSw+\lambda(1-w^Tw)\\\frac{\partial L}{\partial w}=2Sw-2\lambda w
L=wTSw+λ(1−wTw)∂w∂L=2Sw−2λw
易得
S
w
=
λ
w
Sw=\lambda w
Sw=λw
如果还没忘记什么叫做特征值的话,那么这个式子就可以告诉我们:求的坐标系
w
w
w其实就是方差
S
S
S的特征向量。
到这里,我们已经找到了新的坐标系 w w w。
那么开始分析
第一步 自然是求出处理过后 X n × m X_{n\times m} Xn×m协方差矩阵 S n × n S_{n\times n} Sn×n;
第二步 求出协方差矩阵的特征值及对应的特征向量(特征值分解),将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k k k行组成矩阵 P k × n P_{k\times n} Pk×n(舍去了 k − 1 k-1 k−1行到 n n n行的数据达到压缩的目的);
第三步 Y k × m = P k × n X n × m Y_{k\times m}=P_{k\times n}X_{n\times m} Yk×m=Pk×nXn×m, Y k × m Y_{k\times m} Yk×m就是最终得到的降维的数据。
奇异值呢?从开始到结束似乎都没有用到奇异值分解?
考虑一个问题,在维度很低的时候,我们能轻松求出矩阵的协方差以及其特征值和特征向量。那么当维度很多的时候呢?
可见协方差以及以及特征值分解时计算时间随着维度增加呈类似指数型的增长。
此时,SVD就派上用场了:
A
n
×
m
=
U
n
×
n
Σ
n
×
m
V
m
×
m
∗
≈
U
n
×
k
Σ
k
×
k
V
k
×
m
∗
A_{n\times m}=U_{n\times n}\Sigma_{n\times m} V_{m\times m}^{*} \approx U_{n\times k}\Sigma_{k\times k}V_{k\times m}^{*}
An×m=Un×nΣn×mVm×m∗≈Un×kΣk×kVk×m∗
其中
U
U
U是
m
×
m
m\times m
m×m的酉矩阵;
Σ
\Sigma
Σ是
m
×
n
m\times n
m×n非负实数对角矩阵;而
V
∗
V^{*}
V∗,即
V
V
V的共轭转置,是
n
×
n
n\times n
n×n酉矩阵,当前
k
k
k行的奇异值之和奇异值总体之和的比值接近于1约等号成立。
和方阵的特征值分解对比: A n × n = P n × n ∧ n × n P n × n − 1 A_{n\times n}=P_{n\times n}\land_{n\times n}P_{n\times n}^{-1} An×n=Pn×n∧n×nPn×n−1
有一些SVD的实现算法可以不求先求出协方差矩阵$ X^{T}X$ ,也能求出我们的右奇异矩阵 V V V。那么有:
Y
m
×
k
=
U
m
×
k
Σ
k
×
k
V
k
×
n
∗
V
n
×
k
=
U
m
×
k
Σ
k
×
k
Y_{m\times k}=U_{m\times k}\Sigma_{k\times k}V_{k\times n}^{*}V_{n\times k}=U_{m\times k}\Sigma_{k\times k}
Ym×k=Um×kΣk×kVk×n∗Vn×k=Um×kΣk×k
这样,我们就通过SVD(SVD对方阵一样适用)避免了暴力特征分解,得到了最终的降维数据
Y
m
×
k
Y_{m\times k}
Ym×k。
这里用的是右奇异矩阵
V
V
V,对维度进行了压缩。
假设能不先求出协方差也能求出左奇异矩阵
U
U
U,那么我们就可以左乘对样本进行压缩。那么怎么求呢?实际上只要把原始数据
X
m
×
n
X_{m\times n}
Xm×n转置一下得到
X
n
×
m
′
X'_{n\times m}
Xn×m′作为输入就好了(0.0)。
PCA小结
1、PCA假设源信号间彼此非相关,认为主元之间彼此正交,样本呈高斯分布。
2、PCA认为数据内的信息存在方差之中,所以在寻求新的坐标系的时候实际上求的就是方差最大的方向,然后通过拉格朗日乘子法确定实际上新的坐标系其实就是方差(原始数据的方差)的特征向量。
3、特征值分解只能针对方阵,奇异值分解任意矩阵(包括方阵)都可以。实际上都是求协方差的特征向量作为新的坐标系,一个是
P
k
×
n
P_{k\times n}
Pk×n,一个是
V
V
V。只不过奇异值的好处就是可以减少计算量直接求解矩阵
V
V
V。
4、PCA适用于线性相关的维度,对于非线性的数据来说可以考虑用K-PCA也就是基于核函数的PCA。
水平有限,如有错误还请批评指正!
以上。(づ●─●)づ