第13章 利用PCA来简化数据([代码][ch13])
-
降维技术
降维的意思是能够用一组个数为d的向量zi来代表个数为D的向量xi所包含的有用信息,其中d<D。假设对一张512512大小的图片,用svm来做分类,最直接的做法是将图按照行或者列展开变成长度为512512的输入向量xi,跟svm的参数相乘。假如能够将512512的向量在保留有用信息的情况下降维到100,那么存储输入和参数的空间会减少很多,计算向量乘法的时间也会减少很多。所以降维能够有效的减少计算时间。而高维空间的数据很有可能出现分布稀疏的情况,即100个样本在100维空间分布肯定是非常稀疏的,每增加一维所需的样本个数呈指数级增长,这种在高维空间中样本稀疏的问题被称为维数灾难。降维可以缓解这种问题。而为什么可以降维,这是因为数据有冗余,要么是一些没有用的信息,要么是一些重复表达的信息,例如一张512512的图只有中心100*100的区域内有非0值,剩下的区域就是没有用的信息,又或者一张图是成中心对称的,那么对称的部分信息就重复了。正确降维后的数据一般保留了原始数据的大部分的重要信息,它完全可以替代输入去做一些其他的工作,从而很大程度上可以减少计算量。例如降到二维或者三维来可视化。
-
原因
-
使的数据更加简单易用
-
降低很多算法的开销
-
去除噪声
-
使的结果变得非常易懂
-
-
-
从什么角度出发来降维
一般来说可以从两个角度来考虑做数据降维,一种是直接提取特征子集做特征抽取,例如从512*512图中只取中心部分,一种是通过线性/非线性的方式将原来高维空间变换到一个新的空间,这里主要讨论后面一种。后面一种的角度一般有两种思路来实现,一种是基于从高维空间映射到低维空间的projection方法,其中代表算法就是PCA,而其他的LDA、Autoencoder也算是这种,主要目的就是学习或者算出一个矩阵变换W,用这个矩阵与高维数据相乘得到低维数据。另一种是基于流形学习的方法,流形学习的目的是找到高维空间样本的低维描述,它假设在高维空间中数据会呈现一种有规律的低维流形排列,但是这种规律排列不能直接通过高维空间的欧式距离来衡量,如下左图所示,某两点实际上的距离应该是下右图展开后的距离。如果能够有方法将高维空间中流形描述出来,那么在降维的过程中就能够保留这种空间关系,为了解决这个问题,流形学习假设高维空间的局部区域仍然具有欧式空间的性质,即它们的距离可以通过欧式距离算出(Isomap),或者某点坐标能够由临近的节点线性组合算出(LLE),从而可以获得高维空间的一种关系,而这种关系能够在低维空间中保留下来,从而基于这种关系表示来进行降维,因此流形学习可以用来压缩数据、可视化、获取有效的距离矩阵等。
-
几种降维的方法
-
PCA
-
优点:降低数据的复杂性,识别最重要的多个特征
-
缺点:不一定需要,且有可能损失信息
-
使用数据类型:数值型数据
-
原理
-
输入:N个D维向量x1,…,xN,降维到d维
-
输出:投影矩阵W=(w1,…,wd),其中每一个wi都是D维列向量
-
目标:投影降维后数据尽可能分开,maxwtr(WTXXTW)(这里的迹是因为上面提到的B的非对角线元素都是0,而对角线上的元素恰好都是每一维的方差)
-
假设:降维后数据每一维方差尽可能大,并且每一维都正交
-
将输入的每一维均值都变为0,去中心化
-
计算输入的协方差矩阵C=X∗XT
-
对协方差矩阵C做特征值分解
-
取最大的前d个特征值对应的特征向量w1,…,wd
-
-
-
-
-
小节
降维技术使得数据变的更易使用,并且它们往往能够去除数据中的噪音,使得其他机器学习任务更加精确。
降维往往作为预处理步骤,在数据应用到其他算法之前清洗数据。-
比较流行的降维技术
-
独立成分分析
-
因子分析
-
主成分分析(应用最广泛)
-
-
代码托管见Github
[ch13]:https://github.com/Lornatang/machine_learning_in_action_py3/tree/master/src/ch13
来源:CSDN
作者:lornatang
链接:https://blog.csdn.net/shiyipaisizuo/article/details/80381777