PCA revisit

都知道PCA可以做降维,那它为什么可以降维,究竟是怎么降维的呢?

1. 为什么我们要降维?

我们的样本数据好好的,为什么要去做降维,第一个要想清楚这个问题。

  • 也许你是要训练一个分类器,觉得当前特征维度的太高,想去除冗余的维度,选择有区分性的维度
  • 也许你是觉得维度太高,导致系统速度慢,存储开销大
  • 也许你是觉得数据里面有噪声,想去除噪声

总之很多原因导致我们要去做降维,但是有两个主要的因素,就是去除数据里的冗余和噪声。

2. PCA是怎么去做降维的,怎么去除冗余和噪声的?

PCA有一个假设,数据中越是有区分度的维度,他的方差越大,例如我们的信号本身。越是没有区分度的维度,方差越小能量越小,例如噪声;

另外,如果两个维度相关性很高,那么其中一个维度就是冗余的,对于学习分类器没有很大的帮助,例如一个大学生的成绩里面,他的线性代数的成绩,和他的矩阵分析的成绩这两个相关性就很高,分类器只需要其中的一个来判断这个学生是工科生还是文科生。

综合以上两点,我们降维之后的数据一定要每个维度的方差大,同时维度之间的相关性小。

如何描述方差和相关性,有一个东西可以同时描述他们两——协方差矩阵

协方差矩阵是一个方阵,i,j列表示样本的第 i 维和第 j 维之间的相关性 ( i = j 时描述的是第 i 维的方差)。

因此,理想的协方差矩阵的对角线应该是很大的值,而非对角线的位置都接近于0,这样才能保证方差大,相关性小呀!

如果当前样本的协方差矩阵已经是对角矩阵了,那我们就不用做PCA降维了,因为他们的特性已经很好了!很不幸,我们的数据通常都不是那么好,协方差矩阵不是理想的样子,很可能相关性很大。那么很明确,我们要做的就是使得降维之后的数据协方差矩阵是对角矩阵。

那么就要做矩阵对角化呗,什么方法可以得到对角矩阵,这个就是特征值分解,

A = P * B * P(T)    (1)

B就是对角化的矩阵,A是原协方差矩阵,而我们知道B对角线上都是特征值,P里面都是对应的特征向量。如果我们降维之后的协方差矩阵张成B这个样就好了!

说到这里,协方差矩阵的公式还没提呢。

C = S(T) * S / (m - 1); (2)

C是协方差矩阵, S是m * d的样本数据矩阵,代表我们有m个样本,每个样本的维度是d。

那么当前有

A = S(T) * S / (m - 1);(3)

我们想要的是

B = S’(T) * S’ / (m - 1);(4)

S’就是我们降维之后的样本数据。 我们把公式(1) A = P * B * P(T),变一个样子就是 P(T) * A * P = B; 结合式子(3),于是乎

B = P(T) * A * P = P(T) * S(T) * S * P / (m - 1) =  (SP)(T) * (SP) / (m - 1);再结合式子(4)

SP不就是我们想要的降维之后的数据S‘吗?这里,如果把P中的特征向量去掉几个特征值低的,那么不仅选出了方差大的数据,还去除了冗余。因此,PCA就达到了目的了。

3. 总结

所以降维的公式也出来了, S’ = S * P,P是特征值大的维度对应的特征向量。

这是今天看完PCA之后的一点小总结,关于如何做特征值分解,今天也看了许久,感觉要补充的矩阵只是还是很有一些的。

贴一下http://mathfaculty.fullerton.edu/mathews/n2003/QRMethodMod.html 提到的用QR method来做特征值分解的伪代码。

QR Algorithm.  The pseudocode for the QR method is:

1.  i = 0  
        2.      
        3.  repeat  
        4.       Factor    
        5.            
        6.            i = i+1  
        7.  until convergence

迭代的方式用QR分解来求特征值。这都是题外话了!

总之,我们需要理解PCA为什么能用协方差矩阵做特征值分解来求解,为什么这样做降维的结果就是好的结果,认真理解了才能更有效地使用它 。

时间: 2024-08-01 06:07:36

PCA revisit的相关文章

利用Matlab实现PCA demo展示

input_data = rand(1000,3);%随机生成1000个样本,每个样本有x,y,z三个属性 figure(1); %控制画图的窗口为1 hold off; %使当前轴和图形不再具备被刷新的性质,关闭在此基础上再画图 plot3(input_data(:,1), input_data(:,2), input_data(:,3), 'ro'); %% Function PCA, input_data, out_dim % Use this to switch methods use_

主成分分析(Principal Component Analysis,PCA

主成分分析(Principal Component Analysis,PCA)是将多个变量通过线性变换以选出较少几个重要变量的多元统计分析方法. 原理:在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性.人们自然希望变量个数较少而得到的信息较多.在很多情形,变量之间是有一定的相关关系的,当两个变量之间有一定相关关系时,可以解释为这两个变量反映此课题的信息有一定的重叠.主成分分析是对于原先提出的所有变量,将重复的变量(关系紧密的变量)删去多余,建立尽可能少的新变量,使得这些新变量

[降维] PCA 主成分分析

其实早该整理一下PCA了,怎奈一直没有时间,可能是自己对时间没有把握好吧,下面进入正题. 降维的概念 所谓降维,就是降低数据的维数.在机器学习中尤其常见,之前做过对一幅图片提取小波特征,对于一幅大小为800*600的图片,如果每个点提取五个尺度.八个方向的特征,那么每一个像素点提取40个特征,那么一副图片的话就是40*800*600=19200000个特征.也就是我们用一个19200000的向量描述一幅图片.如果有m幅图片,那么特征为m*19200000的大小.显然这个维数太大了,所以需要降维.

机器学习实战精读--------主成分分析(PCA)

对数据进行简化的原因: ① 使得数据集更容易使用 ② 降低许多算法的计算开销 ③ 去除噪声 ④ 使得结果易懂 方差是衡量数据源和期望值相差的度量值. PCA:数据从原来的坐标系转换到新的坐标系,新坐标系是有数据本身决定的. 因子分析:假设观察数据的生成中有一些观察不到的隐变量,假设观察数据是这些隐变量和某些财政所呢个的线性组合. 独立成分分析(ICA):假设数据是从N个数据源生成的,如果数据源的数目小于观察数据的数目,则可以实现降维过程. 通过PCA进行降维处理,我们可以同时获得SVM和决策树的

PCA原理(转)

PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维.网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理.这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么. 当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导.希望读者在

PCA数学角度解析

转:http://blog.csdn.net/passball/article/details/24037593 主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换.PCA方法最著名的应用应该是在人脸识别中特征提取及数据维,我们知道输入200*200大小的人脸图像,单单提取它的灰度值作为原始特征,则这个原始特征将达到40000维,这给后面分类器的处理将带来极大的难度.著名的人脸识别Eigenf

主成分分析(PCA)原理总结

主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就是PCA,下面我们就对PCA的原理做一个总结. 1. PCA的思想 PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据.具体的,假如我们的数据集是n维的,共有m个数据$(x^{(1)},x^{(2)},...,x^{(m)})$.我们希望将这m个数据的维度从n维降到n'维

主成分分析PCA详解

转载请声明出处:http://blog.csdn.net/zhongkelee/article/details/44064401 一.PCA简介 1. 相关背景 上完陈恩红老师的<机器学习与知识发现>和季海波老师的<矩阵代数>两门课之后,颇有体会.最近在做主成分分析和奇异值分解方面的项目,所以记录一下心得体会. 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律.多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加

深度学习笔记——PCA原理与数学推倒详解

PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多,或者说我要存在内存中会占用我的较大内存,那么我就需要对这些个点想一个办法来降低它们的维度,或者说,如果把这些点的每一个维度看成是一个特征的话,我就要减少一些特征来减少我的内存或者是减少我的训练参数.但是要减少特征或者说是减少维度,那么肯定要损失一些信息量.这就要求我在减少特征或者维度的过程当中呢,尽