最风行降维算法:主成分分析法(PCA)
- 在利用PCA前,要先进行均值归一化和特色规范化,使得数值在能够比拟的范畴内
PCA指标
- 当把数据集从二维降到一维时,要求咱们找到一个向量,使得数据集每个点到向量所在直线的投影之间的间隔尽可能小。即蓝色线段的长度,称为投影误差
- 当从n维到k维时,就是找到k个向量,使得数据的投影误差最小
- 总之,PCA的指标就是找到一个低维立体,将数据投影到低维立体上,而后最小化投影误差的平方,即每个点和投影到直线的点的间隔
PCA和线性回归的关系
- PCA和线性回归很类似,但不是线性回归。线性回归时,咱们须要输入x预测y,要最小化点和平行y轴方向交点的均匀平方误差;而PCA不必预测y,要最小化点到直线上投影的误差
PCA算法流程
- 应用PCA前,有一个数据预处理的过程:先进行均值归一化,而后进行特色缩放。这两步和监督学习完全相同,先计算x的均值,而后用x-均值代替每个x(均值归一化);若变量的范畴差距比拟大(预测房价一个是大小一个是卧室数目),x-均值/s(示意x向量的度量范畴,最大值-最小值)
- 而后应用PCA设法找到一个低维子空间,使得数据投影到低维子空间的投影误差最小。总之,PCA要找到一种办法来计算出两个货色:(1)计算出低维空间的向量(2)计算出数据在低维空间的坐标
步骤
- 首先计算出协方差方阵(留神协方差方阵的符号和求和符号相似,不要搞混了),并存入变量Sigma
- 而后计算出Sigma矩阵的特征向量,应用【U,S,V】=svd(Sigma)命令实现(在matlab中svd和eig都能用来计算特征向量,只是svd更稳固;在其余编程环境中,咱们只有找到一个能进行奇怪值合成的函数库也能够实现)
- 奇怪值合成失去的U矩阵是一个nn矩阵,咱们想从n维降到k维,就只有前k列,失去一个n k矩阵,咱们记为U'reduce
- 低维立体向量z=U'reduce的转置x,失去一个k 1的矩阵
当特征向量用矩阵示意时,间接能够通过下图计算失去sigma矩阵
反压缩
- PCA作为压缩数据的算法,能把1000维降到100维;那么是否有算法能把压缩过的数据近似的还原到原始的高纬度数据呢
- X'approx=U'reducez,失去n 1维向量,相似于将数据还原到二维立体的直线上,和原始数据十分靠近了曾经
怎么抉择k
- k是一个参数,称为主成分的数量。人们如何抉择参数k,使得均匀平方误差最小化呢
- X(原始数据)-X'approx(映射数据)。咱们想最小化x和投影点的均匀平方误差,位置立体映射回去正好是投影点
- 数据的总变差:样本长度平方的均值。咱们抉择能使均匀平方误差/数据的总变差小于等于0.01的最小k值。抉择了k,使得99%的差异性得以保留。还能够0.05、0.1、0.15
计算流程
- 依照上边来看,咱们要从k=1开始,算出每一个z,继而失去X'approx,带入公式看比值。若不满足k+1,反复上述步骤直到满足为止。这个过程的效率是相当低的
- 前边应用svd命令失去的矩阵S是一个n*n方阵,主对角线非0,其余元素为0。对于给定的k,1-s的k求和/n求和小于等于0.01即可;即s/s大于0.99.这样咱们只有调用一次svd即可,不须要反复计算X'approx
PCA的利用
- 进步机器学习算法的速度。将10000维的向量降到1000维,放慢计算速度。这时要留神,不仅仅训练集要降维为低维向量,测试集、穿插验证集都要降维为低维向量
- 压缩数据,缩小内存、磁盘的应用,来存储更多数据
- 数据可视化。高维数据不好作图,降为二维或者三维好作图
谬误利用
- 过拟合。的确参数少了不容易过拟合,然而成果很差。因为pca不思考标签,是在对标签y不知情的状况下,将某些信息舍弃掉了,里边不免有无效信息;过拟合拟合数据时则要率标签y。因而正则化才是最好的形式