-楼下小黑-的专栏

人生没有如果,不追,而自随~~~专注于机器学习和高光谱

协方差(矩阵)、特征向量和PCA(Principal Component Analysis,主成分分析)

一、约定---从机器学习(Machine Learning)角度

样本集(数据集):

单个样本(观测值):

维度(变量):

上标表示样本序号,下标表示样本的维度序号或特征序号样本实例一般表示为列向量,样本总数为,样本特征维度数为

 

二、协方差(矩阵)、特征值和特征向量的定义

协方差:表示所有样本对应两个维度之间的关系。

协方差矩阵:其每一个元素对应的是相应维度的协方差值。

设样本维度数为3,即n=3.

特征值与特征向量:阶矩阵,若存在常数和非零维向量,使,则称的特征值,的属于特征值的特征向量。一般阶矩阵会有个特征值和个特征向量。

一般向量与矩阵相乘,向量等于旋转了一个角度,并且大小也发生了变化;向量与标量相乘,方向不变或是相反,只是长度改变了。从式子看出,假设为正数,则向量与矩阵相乘后,方向并没有发生变化,只是大小改变了,这可以看出特征向量包含了矩阵中某些本质的信息。

 

三、PCA(主成分分析)的方差最大化理论

PCA的主要思想简单来说就是把原始维数据集"压缩"到,原始数据集中的样本空间需要个坐标轴,经过PCA后能找到个新坐标轴来表示数据,减少数据量。假设有二维的数据集如下图,我们需要把它"压缩"到一维,那我们就需要找到一个方向或称为坐标,原始数据在该坐标轴投影后的投影点方差最大。为什么要方差最大呢?因为在"信号与系统"中,认为信号起伏较大,具有较大的方差,而噪声起伏较小,具有较小的方差,信噪比就是信号与噪声的方差比,越大越好。故投影点方差越大,保留的有用信息就越多。

    在使用PCA之前,往往要先进行预处理(Pre-processing),采用如下步骤:

    

第1-2步是使每个维度的数据平均值为0,第3-4步是使每个维度的数据的方差为1,这个预处理方法在Machine Learning中被称为"Normalization",其中最大的一个优点是使得每个特征维度具有相似的分布范围,利于算法的收敛。为了利于表示,在原始数据集上采五个点,进行预处理后如下图所示:

在上图中有两个方向,明显地,原始数据集在上的投影点方差比上的大。

 

    为了计算预处理后的数据集在哪个方向上投影后的方差最大,我们假设这个方向的单位向量为(与样本具有相同维度),则样本上的投影为,也就是上的投影点距离原点的长度,那整个数据集在投影后的方差:

我们令,这不正是协方差矩阵的定义吗?只不过这里是矢量化(Vectorization)计算罢了,这里也说明了为什么要进行预处理,把数据集的每个维度的均值变为0. 接着,令,是一个标量。则上式改写成

在式子两边皆乘与,则变为

这就变成了特征值和特征向量的定义,分别是阶方阵 的特征向量和特征值。阶方阵会有个特征值和个特征向量,一个特征值对应一个特征向量。

解得式子所有的特征值和特征向量,较大的特征值表示数据集在该特征向量上的投影点的方差较大,在PCA中往往选取前个较大的特征值构成维的特征矩阵

 

其中为列向量

样本投影后表示为

PCA处理后的样本用在个特征向量上投影的长度重新表示。原始的数据集个样本,每个样本维,每列对应一个样本),特征矩阵个特征向量,每个特征向量维,每列对应一个特征向量),则,数据量减少了。

这里还有一个问题,在实际中样本维数是已知的,怎样确定主元个数(Number of principle components),也就是怎样选取特征向量个数?在此,引入保留方差百分比(percentage of variance retained),也可以称之为能量比(Energy ratio),如下:

我们一般取满足能量比大于或等于99%时最小的整数就可以了,不过为了提过系统的准确率,或是其他问题,还可以自己根据实际情况调整。

PS:MATLABprincomp函数已经实现了PCA算法,只要输入数据,就可以直接计算出相应的特征向量和特征值,详细用法可以看MATLAB自带的文档。



阅读更多
个人分类: Machine Learning
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭