1)解决大规模特征下的数据显示问题
2)使得数据集更易使用
3)降低后续算法的计算
4)消除噪声影响
5)使得结果更易理解
1)PCA
是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。核心在于PCA认为数据集中的主成分,即数据差异性大的维度,即方差大的维度,从而将多个原特征在此维度进行线性组合。具体实施是通过将原来数据的坐标系转换到新的坐标系,而这新的坐标系是由数据本身决定的。第一个新坐标轴选择原始数据中方差最大的方向,第二个新坐标轴选择和第一个坐标轴正交且方差最大的方向,重复进行此过程,重复的次数为原始数据中特征的数目。最后会发现新的坐标轴中,后面很多对应的最大方差都很小,即这些维度对区分数据差异作用很小,可以忽略,从而降低了数据维度。当然,后面可以看到实际编程中,我们通过特征值来观察差异性。
2)FA
通过假设数据是由一些观察不到的隐变量和某些噪声的线性组合,那么因变量的数目可能比观察数据的特征少,因此,找到这些隐变量就可以实现数据的降维。
3)ICA
通过假设数据是从M个数据源生成的,原始数据为多个数据源的混合观察结果,而这些数据源之间在统计上是相互独立的,因此,找到这些数据源就可以实现数据的降维。
4)SVD
属于矩阵分解技术之一,设原始数据集矩阵为T,由T=UAV^T,从有噪声的原始数据中抽取出相关特征,从而大大简化数据。
下面,我们着重介绍PCA法。
PCA实际计算主要包括两种方法,传统步骤为先求该矩阵的协方差矩阵,然后求出协方差矩阵的特征值和特征向量,此时用原数据乘以特征向量就可以实现降维了。另外一种方法就是通过奇异值分解进行求解,这也是Andrew Ng的教学视频求解方法。这两种方法本质上是一样的。
1、PCA流程
1)构造原始数据矩阵(mat):
假设原始数据集含n个特征,N个观测样本,从而可以构建N*n的原始数据集矩阵T
2)对T进行Z-mean归一化处理
得到N*n的Q
3)计算Q的协方差矩阵
得到n*n的P=cov(Q,rowvar=0)
4)计算P的特征值和特征向量
均为n个
5)将特征值从大到小排序
6)保留对应m个最大特征值的特征向量
构成n*m的特征空间矩阵R
7)将原始数据转换到新空间中
得到降维后的N*m数据矩阵X=T*R
8)用于新数据的处理
对新输入的1*n数据I,进行I*R得到降维后的1*m数据O,再进行后续学习
from numpy import * def loadDataSet(fileName, delim='\t'): fr = open(fileName) stringArr = [line.strip().split(delim) for line in fr.readlines()] dataArr = [map(float,line) for line in stringArr] return mat(dataArr) def pca(dataMat, topNfeat=99999): meanVals = mean(dataMat, axis=0) meanRemoved = dataMat - meanVals covMat = cov(meanRemoved,rowvar=0) eigVals,eigVects = linalg.eig(mat(covMat)) eigValInd = argsort(eigVals) eigValInd = eigValInd[:-(topNfeat+1):-1] redEigVects = eigVects[:,eigValInd] lowDDataMat = meanRemoved * redEigVects reconMat = lowDDataMat*redEigVects.T + meanVals return lowDDataMat, reconMat
2、SVD应用
之前提到PCA过程中4-6其实也可以通过SVD实现,我们下面进行解释。
对于,对其进行SVD分解有,其中S是的特征向量矩阵,D是的特征向量矩阵,V是斜对角矩阵,每个元素即T的奇异值,是或者的特征值的非负平方根。
S,V,DT = linalg.svd(mat(T))
对T进行Z-mean归一化处理后,其协方差矩阵可以写作,可见矩阵D的每一列都是T的协方差矩阵的特征向量。
然后就可以得到降维后的处理数据。
但这样有个很大的问题,上面依赖对于T的SVD,计算空间和样本数N关系很大,当样本个数N非常大时,我们需要的存储空间是N×N+N×n+n×n将会非常大,因此,考虑下述方法。
1)对T进行均值归一化处理
2)先求出T的协方差矩阵
3)对sigma进行SVD,即S,V,DT = linalg.svd(mat(sigma))
4)可以证明这里的S也是sigma的特征向量,V为协方差的特征值(有个倍数关系)。
5)截留矩阵S中对应V中最大m个奇异值的特征向量(即列),得到特征空间矩阵R
3、PCA中主成分个数选择
一般,书上建议选择包含90% 信息量的主成分数量,即将特征值或者奇异值的大小的平方当做能量来看。
更一般的来,我们希望选出主成分之后,进行数据分析时,不会造成大量特征的丢失,也就是说可以用下式的error ratio表示经过压缩后的性能如何:
error ratio =
然后,如果error ratio小于我们设定的threshold,说明这样选取主成分是可以接受的。
从数学上可以证明,上面这个error ratio 可以表示为
error ratio =