svd
c以前学习PCA和SVD的时候都是分开学的,也只是记住了求解方法,对于原理理解一直处于懵圈状态,查看了别人的解释,也尝试自己总结一下。如果哪里理解错了,那就gg了
PCA(Principal component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。现在我们将数据抽象为一组向量x" role="presentation" style="position: relative;">x,数据集表示X={x1,x2,...,xn}" role="presentation" style="position: relative;">X={x1,x2,...,xn}, 对于数据X" role="presentation" style="position: relative;">X,去中心化后得到的矩阵X~" role="presentation" style="position: relative;">X˜,则协方差矩阵为∑=X~TX~" role="presentation" style="position: relative;">∑=X˜TX˜。
首先看一下PCA求解步骤:
1. 求协方差矩阵 ∑" role="presentation" style="position: relative;">∑
2. 计算 ∑" role="presentation" style="position: relative;">∑ 的特征值和特征向量,将特征值从大到小排列,前k个特征值对应的特征向量为 P" role="presentation" style="position: relative;">P
3. 降维后的数据为 X~m×nPn×k=A~m×k" role="presentation" style="position: relative;">X˜m×nPn×k=A˜m×k
数据在 w" role="presentation" style="position: relative;">w 方向上的投影为 z=wTx" role="presentation" style="position: relative;">z=wTx,我们希望数据点在新的空间中保留最大的差异性即方差最大,所以:
希望 var(z)=wT∑w" role="presentation" style="position: relative;">var(z)=wT∑w 最大化,其中 ∑=cov(x)" role="presentation" style="position: relative;">∑=cov(x),||w||=1" role="presentation" style="position: relative;">||w||=1。 根据拉格朗日:
maxw wT∑w−α(wTw−1)" role="presentation" style="position: relative;">maxwwT∑w−α(wTw−1)
关于 w" role="presentation" style="position: relative;">w 求导得:
2∑−2αw=0⇒∑w=αw" role="presentation" style="position: relative;">2∑−2αw=0⇒∑w=αw 其中α" role="presentation" style="position: relative;">α 就是特征值, w" role="presentation" style="position: relative;">w 就是特征向量。
所以只需对协方差矩阵 ∑" role="presentation" style="position: relative;">∑ 进行特征值分解,将求得的特征值排序:λ1≥λ2≥…≥λn,再取前k个特征值对应的特征向量构成W=(w1,w2,...,wk)" role="presentation" style="position: relative;">W=(w1,w2,...,wk),就是主成分分析的解。
SVD(Singular Value Decomposition),奇异值分解,是一个能适用于任意的矩阵的一种分解的方法。
定义:
Mm×n=Um×m∑m×nVn×nT" role="presentation" style="position: relative;">Mm×n=Um×m∑m×nVTn×n,
其中,U" role="presentation" style="position: relative;">U,V" role="presentation" style="position: relative;">V为正交矩阵,∑" role="presentation" style="position: relative;">∑只有对角元素而且对角元素是从大到小排列的,这些对角元素称为奇异值。
在几何中,我们可以把矩阵看做空间上的线性变换。奇异值分解的几何含义是:对于任何的一个矩阵,我们都能找到一组坐标轴,它是由原来的坐标轴通过旋转和缩放得到的。奇异值的含义是:这组变换后新的坐标轴的长度。
对于一个二维矩阵,总能找到一组标准正交基v1" role="presentation" style="position: relative;">v1和v2" role="presentation" style="position: relative;">v2,使Mv1" role="presentation" style="position: relative;">Mv1和Mv2" role="presentation" style="position: relative;">Mv2正交,用u1" role="presentation" style="position: relative;">u1和u2" role="presentation" style="position: relative;">u2表示Mv1" role="presentation" style="position: relative;">Mv1和Mv2" role="presentation" style="position: relative;">Mv2的方向。这样M" role="presentation" style="position: relative;">M就从一组标准正交基用另一组标准正交基表示。
Mv1" role="presentation" style="position: relative;">Mv1的长度为||Mv1||=σ1" role="presentation" style="position: relative;">||Mv1||=σ1,||Mv2||=σ2" role="presentation" style="position: relative;">||Mv2||=σ2
则: Mv1=σ1u1" role="presentation" style="position: relative;">Mv1=σ1u1, Mv2=σ1u2" role="presentation" style="position: relative;">Mv2=σ1u2
一个向量x" role="presentation" style="position: relative;">x,在v1" role="presentation" style="position: relative;">v1,v2" role="presentation" style="position: relative;">v2这组标准正交基中表示为x=(v1Tx)v1+(v2Tx)v2" role="presentation" style="position: relative;">x=(vT1x)v1+(vT2x)v2,其中(v1Tx)" role="presentation" style="position: relative;">(vT1x)为投影长度。
从而:
Mx=(v1Tx)Mv1+(v2Tx)Mv2=(v1Tx)σ1u1+(v2Tx)σ2u2" role="presentation" style="position: relative;">Mx=(vT1x)Mv1+(vT2x)Mv2=(vT1x)σ1u1+(vT2x)σ2u2
所以:
M=u1σ1v1T+u2σ2v2T=U∑VT" role="presentation" style="position: relative;">M=u1σ1vT1+u2σ2vT2=U∑VT
矩阵M" role="presentation" style="position: relative;">M的作用是将一个向量从V" role="presentation" style="position: relative;">V这组正交向量空间中旋转到U" role="presentation" style="position: relative;">U空间,并按照∑" role="presentation" style="position: relative;">∑在各个方向上做了缩放,缩放倍数就是奇异值。
性质:
1. U,V" role="presentation" style="position: relative;">U,V都是标准正交矩阵,即UTU=E" role="presentation" style="position: relative;">UTU=E,VTV=E" role="presentation" style="position: relative;">VTV=E
2. MTM=V∑2VT" role="presentation" style="position: relative;">MTM=V∑2VT,MMT=U∑2UT" role="presentation" style="position: relative;">MMT=U∑2UT,
即,V" role="presentation" style="position: relative;">V是MTM" role="presentation" style="position: relative;">MTM的特征向量,即U" role="presentation" style="position: relative;">U是MMT" role="presentation" style="position: relative;">MMT的特征向量,奇异值的平方σ2" role="presentation" style="position: relative;">σ2是MTM" role="presentation" style="position: relative;">MTM和MMT" role="presentation" style="position: relative;">MMT的特征值
3. 将奇异值从大到小排列,前k个奇异值近似描述矩阵Mm×n≈Um×k∑k×kVk×nT" role="presentation" style="position: relative;">Mm×n≈Um×k∑k×kVTk×n
现在来看一下SVD和PCA的关系。
我们讲到要用PCA降维,需要找到样本协方差矩阵X~TX~" role="presentation" style="position: relative;">X˜TX˜的最大的k个特征向量,然后用这最大的k个特征向量张成的矩阵来做低维投影降维。
注意,SVD也可以得到协方差矩阵X~TX~" role="presentation" style="position: relative;">X˜TX˜最大的k个特征向量张成的矩阵。
但是SVD有个好处,有一些SVD的实现算法可以不求先求出协方差矩阵,也能求出右奇异矩阵V" role="presentation" style="position: relative;">V。也就是说,PCA算法可以不用做特征分解,而是做SVD来完成。这也是为什么很多工具包中PCA算法的背后真正的实现是用的SVD,而不是我们认为的暴力特征分解。
另一方面,注意到PCA仅仅使用了我们SVD的右奇异矩阵,没有使用左奇异矩阵。而左奇异矩阵可以用于行数的压缩,右奇异矩阵可以用于列数,也就是PCA降维。
所以,有了SVD就可以得到两个方向的PCA。
文章最后发布于: 2018-04-06 16:30:36
相关阅读
win10中wpcap.dll丢失的解决办法(解决Proteus中与网络
解决Proteus中与网络类仿真相关的模块报错问题,如ENC28J60。
使用windump时,提示wpcap.dll丢失。
下载win10pcap.msi安装。
网址:htt
PCA 以及 SPCA
本文主要为PCA(principal component analysis)的学习记录以及SPCA(sparse principal component analysis)的学习记录
因为关于PCA
奇异值分解(SVD)原理详解
一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下
超好理解的PCA 特征选择
一、PCA简介1. 相关背景
主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量
PCA
一,引言
降维是对数据高维度特征的一种预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现