使用PCA对特征数据进行降维
2017-05-02 09:51
519 查看
相关知识
介绍一个PCA的教程:A tutorial on Principal Components Analysis ——Lindsay
I Smith
1.协方差 Covariance
变量X和变量Y的协方差公式如下,协方差是描述不同变量之间的相关关系,协方差>0时说明 X和 Y是正相关关系,协方差<0时 X和Y是负相关关系,协方差为0时 X和Y相互独立。
协方差的计算是针对两维的,对于n维的数据集,可以计算C(n,2)种协方差。 n维数据的协方差矩阵的定义如下:
Dim(x)表示第x维。
对于三维(x,y,z),其协方差矩阵如下,可看出协方差矩阵是一个对称矩阵(symmetrical),其对角线元素为每一维的方差:
2.特征向量和特征值
若
,则称
是A的特征值,X是对应的特征向量。可以这样理解:矩阵A作用在它的特征向量X上,仅仅使得X的长度发生了变化,缩放比例就是相应的特征值
。特征向量只能在方阵中找到,而且并不是所有的方阵都有特征向量,并且如果一个n*n的方阵有特征向量,那么就有n个特征向量。一个矩阵的所有特征向量是正交的,即特征向量之间的点积为0,一般情况下,会将特征向量归一化,即向量长度为1。
3.PCA过程
第一步,获取数据,下图中的Data为原始数据,一共有两个维度,可看出二维平面上的点。
下图是Data在二维坐标平面上的散点图:
第二步,减去平均值,对于Data中的每一维数据分别求平均值,并减去平均值,得到DataAdjust数据。
第三步,计算DataAdjust的协方差矩阵
第四步,计算协方差矩阵的特征向量和特征值,选取特征向量
特征值0.490833989对应的特征向量是(-0.735178656, 0.677873399),这里的特征向量是正交的、归一化的,即长度为1。
下图展示DataAdjust数据和特征向量的关系:
正号表示预处理后的样本点,斜着的两条线就分别是正交的特征向量(由于协方差矩阵是对称的,因此其特征向量正交),特征值较大的那个特征向量是这个数据集的主要成分(principle component)。通常来说,当从协方差矩阵计算出特征向量之后,下一步就是通过特征值,对特征向量进行从大到小的排序,这将给出成分意义的顺序。成分的特征值越小,其包含的信息量也就越少,因此可以适当选择。
如果数据中有n维,计算出n个特征向量和特征值,选择前k个特征向量,然后最终的数据集合只有k维,取的特征向量命名为FeatureVector。
这里特征值只有两个,我们选择其中最大的那个,1.28402771,对应的特征向量是
。
第五步,将样本点投影到选取的特征向量上,得到新的数据集
假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为
这里是FinalData(10*1) = DataAdjust(10*2矩阵)×特征向量
得到结果为
下图是FinalData根据最大特征值对应的特征向量转化回去后的数据集形式,可看出是将DataAdjust样本点分别往特征向量对应的轴上做投影:
如果取的k=2,那么结果是
可见,若使用了所有特征向量得到的新的数据集,转化回去之后,与原来的数据集完全一样(只是坐标轴旋转)。
相关文章推荐
- spark机器学习(Chapter 03)--使用spark-python进行数据预处理和特征提取
- 如何使用GIST+LIBLINEAR分类器提取CIFAR-10 dataset数据集中图像特征,并用测试数据进行实验
- 文本分类(四):使用CHI进行文本的降维---提特征
- 对糖尿病数据进行PCA降维
- 文本分类(五):使用LDA进行文本的降维---提特征
- 数据降维处理:PCA之特征值分解法例子解析
- 机器学习02-使用python中的sklearn库进行数据的预处理(数据的特征工程)
- 数据挖掘—LDA,PCA特征提取降维与SVM多分类在人脸识别中的应用-数据集ORL
- 如何使用GIST+LIBLINEAR分类器提取CIFAR-10 dataset数据集中图像特征,并用测试数据进行实验
- 机器学习(八)使用sklearn库进行数据分析_——特征处理之过滤、包裹、嵌入型
- 机器学习(九)使用sklearn库进行数据分析_——文本特征处理
- Sentinel 2 Atmospheric Correction in Google Earth Engine(使用GEE进行哨兵2数据大气校正)
- 使用josn数据进行数据传输时需要注意字符编码
- python使用pygal进行绘制数据图表和监控图表
- python使用pygal进行绘制数据图表和监控图表
- springmvc使用JSR-303进行数据校验实例
- 在网络中使用IO流进行数据收发
- android 使用JSON进行网络数据交换
- 使用Intent进行数据的传递讲解与实例
- PHP中使用GOOGCHART类进行饼状图、走势图数据统计