主成分分析方法(PCA)详述 以及 为什么要用SVD?

目录

概述

最大方差理论

1.3  PCA算法总结及奇异值分解应用

1.3.1基于特征值分解协方差矩阵

1.3.2 基于奇异值分解协方差矩阵

为什么要用SVD进行降维?

1.4 PCA总结

参考文献


概述

PCA(Principal Component Analysis),即主成分分析方法,也称为主分量分析,是一种使用最广泛的数据降维算法。PCA通过线性变换将原始数据(n维特征)变换为一组各维度(k维特征)线性无关的数据,其中k维特征是全新的正交特征也被称为主成分。

在降维过程中,应该要求在减少数据特征的同时减少原特征包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量之间存在一定的相关关系,考虑将关系紧密的特征变成尽可能少的特征,使这些新特征是两两不相关的,那么就可以用较少的综合特征分别代表存在于各个变量中的各类信息。主成分分析就属于这类降维算法。

但存在这样的一个问题,到底删除哪一列损失的信息才最小?也或者根本不是单纯删除几列,而是通过某些变换将原始数据变为更少的列且又使得丢失的信息最小?到底如何度量丢失信息的多少?如何根据原始数据决定具体的降维操作步骤?

要回答上面的问题,就要对降维问题进行数学化和形式化的讨论。而PCA是一种具有严格数学基础并且已被广泛采用的降维方法。

PCA有两种通俗易懂的解释:(1)最大方差理论(2)最小化降维造成的损失

就最大方差理论,对PCA进行数学原理讨论。

最大方差理论

讨论原理是从直接下面这篇博客搬运来的。
           http://blog.codinglabs.org/articles/pca-tutorial.html

所以原理直接去篇博客看吧,本来想搬过来,发现公式太多了,懒得自己手写了,针对上述博客,做一些SVD奇异值分解的补充。[一定要看上述博客,要不然下面就看不懂]


1.3  PCA算法总结及奇异值分解应用

由PCA原理讲述可知,PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。运用协方差矩阵,通计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

求解有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,故PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。

1.3.1基于特征值分解协方差矩阵

这种方法的一般步骤如下:

设有m条n维数据。

1)将原始数据按列组成n行m列矩阵X

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

3)求出协方差矩阵

4)求出协方差矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

6)Y=PX即为降维到k维后的数据

通过特征值分解协方差矩阵,那么我们只能得到一个方向的PCA降维。这个方向就是对数据矩阵X从行(或列)方向上压缩降维。


1.3.2 基于奇异值分解协方差矩阵

                                                 

对A做奇异值(SVD)分解:

                                             

对角线上的元素是奇异值,U和V是正交矩阵:U^{T}U=E,V^{T}V=E。将A的奇异值分解带入协方差矩阵:

类比:

                                                                                    C=P\Lambda P^{T}

可以看出,U为特征向量,奇异值和特征值之间存在的关系为:

因此,选取\sum的左上角的前k个元素,U中对应的前k个特征向量,即可实现对A的降维处理。

基本步骤:

输入:数据集,需要降到k维。

1) 去平均值,即每一位特征减去各自的平均值。

2) 计算协方差矩阵。

3) 通过SVD计算协方差矩阵的特征值与特征向量。

4) 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

5) 将数据转换到k个特征向量构建的新空间中。


为什么要用SVD进行降维?

(1)内存少

奇异值分解矩阵中\sum里面的奇异值按从大到小的顺序排列,奇异值从大到小的顺序减小的特别快。在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上。也就是说,剩下的90%甚至99%的奇异值几乎没有什么作用。因此,我们可以用前面r个大的奇异值来近似描述矩阵,于是奇异值分解公式可以写成如下:

其中r是一个远远小于m和n的数,右边的三个矩阵相乘的结果将会使一个接近A的矩阵。如果r越接近于n,则相乘的结果越接近于A。如果r的取值远远小于n,从计算机内存的角度来说,右边三个矩阵的存储内存要远远小于矩阵AA^{T}A的。

(2)SVD可以获取另一个方向上的主成分,而基于特征值分解的只能获得单个方向上的主成分

左奇异矩阵(U)可以用于对行数的压缩;右奇异矩阵(V)可以用于对列(即特征维度)的压缩。这就是我们用SVD分解协方差矩阵实现PCA可以得到两个方向的PCA降维(即行和列两个方向)。

(3)数值稳定性

通过SVD可以得到PCA相同的结果,但是SVD通常比直接使用PCA更稳定。因为PCA需要计算X^{T}X的值,对于某些矩阵,求协方差时很可能会丢失一些精度。例如Lauchli矩阵:

 

1.4 PCA总结

PCA也存在一些限制,例如它可以很好的解除线性相关,但是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关。另外,PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。


参考文献:

[1]https://blog.csdn.net/wangjian1204/article/details/50642732#commentBox

[2]http://blog.codinglabs.org/articles/pca-tutorial.html

[3]https://blog.csdn.net/program_developer/article/details/80632779


课上老师的笔记补充:

1,PCA难以很好的挖掘组间信息,只考虑效应的话,可以使用。

2,在利用SVD求解过程中,一般选取特征值和大于85%(一些文章是90%)的特征值就可以了。但不排除,特征值没有明显递减趋势的存在,这个时候应该如何选取?是一个关键点

3,若为Lauchli那样矩阵,可以做分块处理,来利用PCA将维处理

4,PCA只能解决线性问题,(极大线性无关组)。若为非线性问题,可以在正交方向上,做一次。在非正交方向上,再做一次PCA处理效果可能更好。

5,kernel-PCA 也要掌握(下一篇博客写)

6,核函数应用比较广泛(分类,相关性)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Foneone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值