主成分分析原理及推导

声明:出处http://blog.csdn.net/zhongkejingwang/article/details/42264479

什么是PCA?

在数据挖掘或者图像处理等领域经常会用到主成分分析,这样做的好处是使要分析的数据的维度降低了,但是数据的主要信息还能保留下来,并且,这些变换后的维两两不相关!至于为什么?那就接着往下看。在本文中,将会很详细的解答这些问题:PCA、SVD、特征值、奇异值、特征向量这些关键词是怎么联系到一起的?又是如何在一个矩阵上体现出来?它们如何决定着一个矩阵的性质?能不能用一种直观又容易理解的方式描述出来?

数据降维

为了说明什么是数据的主成分,先从数据降维说起。数据降维是怎么回事儿?假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能把x,y,z坐标系旋转一下,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x‘,y‘,z‘,那么这组数据的表示只用x‘和y‘两个维度表示即可!当然了,如果想恢复原来的表示方式,那就得把这两个坐标之间的变换矩阵存下来。这样就能把数据维度降下来了!但是,我们要看到这个过程的本质,如果把这些数据按行或者按列排成一个矩阵,那么这个矩阵的秩就是2!这些数据之间是有相关性的,这些数据构成的过原点的向量的最大线性无关组包含2个向量,这就是为什么一开始就假设平面过原点的原因!那么如果平面不过原点呢?这就是数据中心化的缘故!将坐标原点平移到数据中心,这样原本不相关的数据在这个新坐标系中就有相关性了!有趣的是,三点一定共面,也就是说三维空间中任意三点中心化后都是线性相关的,一般来讲n维空间中的n个点一定能在一个n-1维子空间中分析!所以,不要说数据不相关,那是因为坐标没选对!

上面这个例子里把数据降维后并没有丢弃任何东西,因为这些数据在平面以外的第三个维度的分量都为0。现在,我假设这些数据在z‘轴有一个很小的抖动,那么我们仍然用上述的二维表示这些数据,理由是我认为这两个轴的信息是数据的主成分,而这些信息对于我们的分析已经足够了,z‘轴上的抖动很有可能是噪声,也就是说本来这组数据是有相关性的,噪声的引入,导致了数据不完全相关,但是,这些数据在z‘轴上的分布与原点构成的夹角非常小,也就是说在z‘轴上有很大的相关性,综合这些考虑,就可以认为数据在x‘,y‘轴上的投影构成了数据的主成分!

现在,关于什么是数据的主成分已经很好的回答了。下面来看一个更具体的例子。

下面是一些学生的成绩:

首先,假设这些科目成绩不相关,也就是说某一科考多少份与其他科没有关系。那么一眼就能看出来,数学、物理、化学这三门成绩构成了这组数据的主成分(很显然,数学作为第一主成分,因为数学成绩拉的最开)。为什么一眼能看出来?因为坐标轴选对了!下面再看一组数据,还能不能一眼看出来:

是不是有点凌乱了?你还能看出来数据的主成分吗?显然不能,因为在这坐标系下数据分布很散乱。所以说,看到事物的表象而看不到其本质,是因为看的角度有问题!如果把这些数据在空间中画出来,也许你一眼就能看出来。但是,对于高维数据,能想象其分布吗?就算能描述分布,如何精确地找到这些主成分的轴?如何衡量你提取的主成分到底占了整个数据的多少信息?要回答这些问题,需要将上面的分析上升到理论层面。接下来就是PCA的理论分析。

PCA推导

以下面这幅图开始我们的推导:

上面是二维空间中的一组数据,很明显,数据的分布让我们很容易就能看出来主成分的轴(简称主轴)的大致方向。下面的问题就是如何通过数学计算找出主轴的方向。来看这张图:

现在要做的事情就是寻找u1的方向,对于这点,我想好多人都有经验,这不就是以前用最小二乘法拟合数据时做的事情吗!对,最小二乘法求出来的直线(二维)的方向就是u1的方向!那u2的方向呢?因为这里是二维情况,所以u2方向就是跟u1垂直的方向,对于高维数据,怎么知道u2的方向?经过下面的理论推导,各个主轴都能确定下来。

给定一组数据:(如无说明,以下推导中出现的向量都是默认是列向量)

将其中心化后表示为:

中心化后的数据在第一主轴u1方向上分布散的最开,也就是说在u1方向上的投影的绝对值之和最大(也可以说方差最大),计算投影的方法就是将x与u1做内积,由于只需要求u1的方向,所以设u1是单位向量。

也就是最大化下式:

也即最大化:

解释:平方可以把绝对值符号拿掉,光滑曲线处理起来方便。

两个向量做内积可以转化成矩阵乘法:

所以目标函数可以表示为:

括号里面就是矩阵乘法表示内积,转置以后的行向量乘以列向量得到一个数。因为一个数的转置还是其本身,所以又可以将目标函数化为:

这样就可以把括号去掉!去掉以后变成:

由于u1和i无关,可以把它拿到求和符外面:

注意,其实括号里面是一个矩阵乘以自身的转置,这个矩阵形式如下:

X矩阵的第i列就是xi,于是有:

所以目标函数最后化为:

上式到底有没有最大值呢?如果没有前面的1/n,那就是就是一个标准的二次型!并且XX‘(为了方便,用‘表示转置)得到的矩阵是一个半正定的对称阵!为什么?首先XX‘是对称阵,因为(XX‘)‘=XX‘,下面证明它是半正定,什么是半正定?就是所有特征值大于等于0。

假设XX‘的某一个特征值为,对应的特征向量为,则有:

证明完毕!对于半正定阵的二次型,存在最大值!现在问题就是如何求目标函数的最大值?以及取最大值时u1的方向?下面介绍两种方法。

方法一  拉格朗日乘数法

目标函数和约束条件构成了一个最大化问题:

构造拉格朗日函数:

对u1求导

显然,u1即为XX‘特征值对应的特征向量!XX‘的所有特征值和特征向量都满足上式,那么将上式代入目标函数表达式即可得到

所以,如果取最大的那个特征值,那么得到的目标值就最大。有可能你会有疑问,为什么一阶导数为0就是极大值呢?那么再求二阶导数:

二阶导数半负定,所以,目标函数在最大特征值所对应的特征向量上取得最大值!所以,第一主轴方向即为第一大特征值对应的特征向量方向。第二主轴方向为第二大特征值对应的特征向量方向,以此类推,证明类似。

下面介绍第二种方法

方法二  奇异值法

这方法是从矩阵分析里面总结的,随便取个名叫奇异值法。

首先,对于向量x,其二范数(也就是模长)的平方为:

所以有:

把二次型化成一个范数的形式,最大化上式也即这个问题:对于一个矩阵,它对一个向量做变换,变换前后的向量的模长伸缩尺度如何才能最大?这个很有趣,简直就是把矩阵的真面目给暴露出来了。为了给出解答,下面引入矩阵分析中的一个定理:

表示矩阵A的最大奇异值!一个矩阵A的奇异值为AA‘(或A‘A)的特征值开平方,前面讲过AA‘的特征值都大于等于0。当x为单位向量时,上式就是我们的目标函数表达式。然而,上式只是告诉我们能取到最大值是多少,并没有说取到最大值时x的方向,要想知道取到最大值时的方向,那就来证明这个定理吧!

考察对称阵

为其n个特征值,并令与之对应的单位特征向量为:

对了,忘了提醒,对称阵不同特征值对应的特征向量两两正交!这组特征向量构成了空间中的一组单位正交基。

任意取一个向量x,将其表示为

代入上式可得

由于这些单位特征向量两两正交,只有相同的做内积为1,不同的做内积为0.所以上式做内积出来的结果为:

根据特征值的大小关系有

所以

定理得证!

显然,当时取得最大值

再回到我们的问题,需要最大化:

将X‘代入上面证明过程中的矩阵A,则u1的方向即为A‘A=(X‘)‘X‘=XX‘对大特征值对应的特征向量的方向!

所以第一主轴已经找到,第二主轴为次大特征值对应的特征向量的方向,以此类推。

两种方法殊途同归,现在来解答关于主成分保留占比的问题。上面我们知道第一主轴对应的最大值是最大奇异值(也就是AA‘最大特征值开平方),第二主轴对应的最大值是次大奇异值,以此类推。那么假设取前r大奇异值对应的主轴作为提取的主成分,则提取后的数据信息占比为:

分子是前r大奇异值的平方和,分母是所有奇异值的平方和。

到此,主成分分析PCA就讲完了,文章最后提到了奇异值,关于这个,后面的奇异值分解(SVD)文章将会详细讲解并给出其具体应用!

时间: 2024-10-14 06:24:18

主成分分析原理及推导的相关文章

机器学习笔记_PRML_Adaboost 算法的原理与推导

转自:http://blog.csdn.net/v_july_v/article/details/40718799 Adaboost 算法的原理与推导 1 Adaboost的原理 1.1 Adaboost是什么 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出.它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器.同时,在每一轮中加

Adaboost 算法的原理与推导——转载及修改完善

<Adaboost算法的原理与推导>一文为他人所写,原文链接: http://blog.csdn.net/v_july_v/article/details/40718799 另外此文大部分是摘录李航的<统计学笔记>一书,原书下载链接:http://vdisk.weibo.com/s/z4UjMcqGpoNTw?from=page_100505_profile&wvr=6 在根据文中推导是发现有计算错误以及省略的步骤,在下文将会进行说明. ------------------

【机器学习】算法原理详细推导与实现(五):支持向量机(下)

[机器学习]算法原理详细推导与实现(五):支持向量机(下) 上一章节介绍了支持向量机的生成和求解方式,能够根据训练集依次得出\(\omega\).\(b\)的计算方式,但是如何求解需要用到核函数,将在这一章详细推导实现. 核函数 在讲核函数之前,要对上一章节得到的结果列举出来.之前需要优化的凸函数为: \[ min_{\gamma,\omega,b}->\frac{1}{2}||\omega||^2 \] \[ y^{(i)}(\omega^Tx^{(i)}+b) \geq 1 ,i=1,2,.

【机器学习】算法原理详细推导与实现(六):k-means算法

[机器学习]算法原理详细推导与实现(六):k-means算法 之前几个章节都是介绍有监督学习,这个章节介绍无监督学习,这是一个被称为k-means的聚类算法,也叫做k均值聚类算法. 聚类算法 在讲监督学习的时候,通常会画这样一张图: 这时候需要用logistic回归或者SVM将这些数据分成正负两类,这个过程称之为监督学习,是因为对于每一个训练样本都给出了正确的类标签. 在无监督学习中,经常会研究一些不同的问题.假如给定若干个点组成的数据集合: 所有的点都没有像监督学习那样给出类标签和所谓的学习样

线性判别分析(LDA), 主成分分析(PCA)及其推导【转】

前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA是一个和LDA非常相关的算法,从推导.求解.到算法最终的结果,都有着相当的相似. 本次的内容主要是以推导数学公式为主,都是从算法的物理意义出发,然后一步一步最终推导到最终的式子,LDA和PCA最终的表现都是解一个矩阵特征值的问题,但是理解了如何推导,才能更深刻的理解其中的含义.本次内容要求读者有一些

PCA(主成分分析)原理,步骤详解以及应用

主成分分析(PCA, Principal Component Analysis) 一个非监督的机器学习算法 主要用于数据的降维处理 通过降维,可以发现更便于人类理解的特征 其他应用:数据可视化,去噪等 主成分分析是尽可能地忠实再现原始重要信息的数据降维方法 原理推导: 如图,有一个二维的数据集,其特征分布于特征1和2两个方向 现在希望对数据进行降维处理,将数据压缩到一维,直观的我们可以想到将特征一或者特征二舍弃一个,可以得到这样的结果 ------- : 舍弃特征1之后 ------- : 舍弃

Adaboost 算法的原理与推导

0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次课上讲决策树与Adaboost,其中,Adaboost讲得酣畅淋漓,讲完后,我知道,可以写本篇博客了. 无心啰嗦,本文结合邹博之决策树与Adaboost 的PPT 跟<统计学习方法>等参考资料写就,可以定义为一篇课程笔记.读书笔记或学习心得,有何问题或意见,欢迎于本文评论下随时不吝指出,thank

【主成分分析】PCA主成分分析原理详解

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

PCA主成分分析 原理讲解 python代码实现

本文参考自:https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/13.PCA/pca.py https://github.com/lawlite19/MachineLearning_Python#%E5%85%ADpca%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E9%99%8D%E7%BB%B4 1. 用途: 通俗来说: 考察一个人的智力情况,就直接看数学成绩就行(存在: