2. PCA+SVD原理介绍 (附PCA,PCA+SVD在python下的具体代码实践,python成熟PCA+SVD包的调用,训练集测试集在PCA时注意事项的链接)

PCA,SVD原理介绍及python下的具体实现及包的调用

  • 1. PCA原理介绍
  • 2. PCA+SVD原理介绍
      • 2.1 SVD公式简单介绍:
      • 2.2 SVD和PCA之间的联系:
        • 2.2.1 SVD与PCA联系的简单数学推理(很简单理解的!):
        • 2.2.2 SVD优化PCA:
  • 3. python下编写代码实现PCA+SVD
  • 4. python里如何使用成熟的现有PCA包

1. PCA原理介绍

详情参见我的上一篇博客:PCA原理介绍

2. PCA+SVD原理介绍

上文详细介绍了PCA的基本原理,现在很多都是通过引入SVD综合PCA,来对PCA进行优化,但是PCA怎么和SVD扯上关系呢?那就要看到今天所讲的 PCA+SVD原理介绍咯~本文主要侧重于数学推理,理清SVD对PCA的优化原因,还有SVD和PCA之间怎么变换。


2.1 SVD公式简单介绍:

   特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的;
   在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有m个学生(样本),每个学生有n科成绩(属性),这样形成的一个m*n的矩阵就可能不是方阵,我们怎样才能描述这样普通的矩阵的重要特征呢?

   奇异值分解可以用来干这个事情,因为奇异值分解是一个能适用于任意的矩阵的一种分解的方法:
2. PCA+SVD原理介绍 (附PCA,PCA+SVD在python下的具体代码实践,python成熟PCA+SVD包的调用,训练集测试集在PCA时注意事项的链接)_第1张图片
U,V为正交矩阵,即乘以自己的转置得到E;
U 称为数据矩阵的 左奇异值向量
V 称为数据矩阵的 右奇异值向量
∑ 只有对角元素,且对角元素称为 奇异值

2. PCA+SVD原理介绍 (附PCA,PCA+SVD在python下的具体代码实践,python成熟PCA+SVD包的调用,训练集测试集在PCA时注意事项的链接)_第2张图片


再看PCA里协方差矩阵求特征值的式子:在这里插入图片描述
2. PCA+SVD原理介绍 (附PCA,PCA+SVD在python下的具体代码实践,python成熟PCA+SVD包的调用,训练集测试集在PCA时注意事项的链接)_第3张图片
(图片摘自: 奇异值分解(SVD)原理与在降维中的应用)
同时,PCA里协方差矩阵行列都是属性节点集组成,则如果有n个节点,协方差矩阵CovMat维度可达到 n 2 n^{2} n2,属性节点维度越高,矩阵维度更高,计算效率越低,那怎么解决这个问题呢?

2.2 SVD和PCA之间的联系:

2.2.1 SVD与PCA联系的简单数学推理(很简单理解的!):

前提:

A是样本的协方差矩阵:nxn的方阵 (属性x属性);


对A进行SVD分解与特征值分解:
在这里插入图片描述
在这里插入图片描述

得到结论:
对协方差矩阵A做SVD得到的U A _A A就是投影矩阵W!


在这里插入图片描述


至于原矩阵C和协方差矩阵A之间SVD的关系,参见SVD与PCA之间的关系详解
2. PCA+SVD原理介绍 (附PCA,PCA+SVD在python下的具体代码实践,python成熟PCA+SVD包的调用,训练集测试集在PCA时注意事项的链接)_第4张图片


2.2.2 SVD优化PCA:

注意到我们的SVD也可以得到协方差矩阵X T ^T TX最大的d个特征向量张成的矩阵V B _B B
但是SVD有个好处,有一些SVD的实现算法可以不求先求出协方差矩阵X T ^T TX,也能求出我们的右奇异矩阵V B _B B。也就是说,我们的PCA算法可以不用做特征分解,而是做SVD来完成。这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是我们我们认为的暴力特征分解。

2. PCA+SVD原理介绍 (附PCA,PCA+SVD在python下的具体代码实践,python成熟PCA+SVD包的调用,训练集测试集在PCA时注意事项的链接)_第5张图片
但除此之外,由样本矩阵SVD分解的左奇异矩阵结合奇异值矩阵,也可以对样本矩阵进行列降维。


3. python下编写代码实现PCA+SVD

见我的另一篇博客:python下编写代码实现PCA+SVD

4. python里如何使用成熟的现有PCA包

见我的另一篇博客:python里如何使用成熟的现有PCA包

你可能感兴趣的:(Python,PCA)