PCA主成分分析

阅读笔记,参考原文在后面的引用中

1、降维

多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的工作量,因此需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失。由于各变量之间存在一定的相关关系,因此可以考虑将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的。
通常使用针对高纬度数据特征进行数据降维,将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。

数据降维的优点:

  • 使得数据集更易使用;
  • 降低算法的计算开销;
  • 去除噪声;
  • 使得结果容易理解。

数据降维的目标:

  • 将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

2、PCA主成分分析

PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。

实际上,大部分方差都保留在前k个坐标轴中,因此可以忽略后面包含方差几乎为0的特征维度,实现对数据特征的降维处理。但是如何得到前k个主方向呢?

事实上,通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

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

2.1 基于特征值分解矩阵实现PCA算法

特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多么重要,而特征向量表示这个特征是什么。
基于特征值分解矩阵求解PCA的算法步骤

设有m条n维数据,m为样本数量,n为特征维度数量,需要降到k维
1)将原始数据按列组成n行m列矩阵X= ( x 1 , x 2 , . . . , x m ) (x_1, x_2, ...,x_m) (x1,x2,...,xm)
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵C= 1 m X X 𝖳 \frac{1}{m}XX^𝖳 m1XXT, 注:这里除或不除以样本数量m或m-1,其实对求出的特征向量没有影响。
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

2.2 基于SVD分解矩阵实现PCA

奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵X总是存在一个奇异值分解:
X = U Σ V T X=U \Sigma V^T X=UΣVT
假设X是一个 m ∗ n m*n mn的矩阵,那么得到的U是一个 m ∗ m m*m mm的方阵,U里面的正交向量被称为左奇异向量。Σ是一个 m ∗ n m*n mn的矩阵,Σ除了对角线其它元素都为0,对角线上的元素称为奇异值。 V T V^T VT是V的转置矩阵,是一个 n ∗ n n*n nn的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会将Σ上的值按从大到小的顺序排列。
SVD分解矩X的步骤:

1)求 X X T XX^T XXT的特征值和特征向量,用单位化的特征向量构成U
2)求 X T X X^TX XTX的特征值和特征向量,用单位化的特征向量构成V
3)将 X X T XX^T XXT X T X X^TX XTX的特征值求平方根,构成Σ

如果我们选择前k个大的特征值来近似描述矩阵,则特征值分解的公式可以写成:
A m ∗ n ≈ U m ∗ r Σ r ∗ r V r ∗ n T A_{m*n} \approx U_{m*r}\Sigma_{r*r}V^T_{r*n} AmnUmrΣrrVrnT
其中r是一个远远小于m和n的数,所以在奇异值分解中r的取值很重要,就是在计算精度和时间空间之间做选择。

基于SVD分解矩阵求解PCA的算法步骤:

设有m条n维数据,m为样本数量,n为特征维度数量,需要降到k维
1)将原始数据按列组成n行m列矩阵X= ( x 1 , x 2 , . . . , x m ) (x_1, x_2, ...,x_m) (x1,x2,...,xm)
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)计算协方差矩阵
4)通过SVD计算协方差矩阵的特征值与特征向量
5)对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量组成特征向量矩阵
6)将数据转换到k个特征向量构建的新空间中。

2.3 两种方法实现PCA的讨论

利用特征值分解提取特征矩阵容易理解且便于实现,但是特征值分解最大的问题是只能针对方阵,即n*n的矩阵。而在实际的应用中,需要分解的大部分都不是方阵。
使用SVD方法,相比于使用特征值分解的方法有两个好处:
(1)在PCA降维中,我们需要找到样本协方差矩阵 X X 𝖳 XX^𝖳 XXT的最大k个特征向量,然后用这最大的k个特征向量组成的矩阵来做低维投影降维。当样本数多、样本特征数也多的时候,求协方差矩阵的计算量会比较大。
有一些SVD的实现算法可以先不求出协方差矩阵 X X 𝖳 XX^𝖳 XXT也能求出我们的右奇异矩阵V。也就是说,PCA算法可以不用做特征分解而是通过SVD来完成,这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是暴力特征值分解。
(2)PCA仅仅使用了我们SVD的右奇异矩阵,没有使用左奇异矩阵,那么左奇异矩阵有什么用呢?
假设我们的样本是m×n的矩阵X,如果我们通过SVD找到了矩阵 X X 𝖳 XX^𝖳 XXT最大的d个特征向量组成的m×d维矩阵U,则我们如果进行如下处理: X d × n ′ = U d × m T X m × n X^′_{d×n}=U^T_{d×m}X_{m×n} Xd×n=Ud×mTXm×n。可以得到一个d×n的矩阵X’,这个矩阵和我们原来的m×n维样本矩阵X相比,行数从m减到了d,可见对行数进行了压缩。
也就是说,左奇异矩阵可以用于行数的压缩。相对的,右奇异矩阵可以用于列数即特征维度的压缩,此时也就是我们的PCA降维。

参考:
主成分分析PCA原理详解
机器学习中SVD总结
PCA的数学原理
SVD(奇异值分解)与在PCA降维中的使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值