为什么使用维数约减:
应用于数据压缩,数据压缩不仅通过压缩数据使得数据占有更少的计算机内存和硬盘空间,还能给算法提速。
什么是维数约减:
给出数据集:{ }, . 使得数据集转换成:{ }, , k <= n. 尽量使得k=2/3,这样便于将数据可视化。
主成分分析法(Principal Component Analysis, PCA):
就2D到1D来举例,就是从平面上寻找一个向量u,每个数据点到u的距离为投影误差,那么就是找一个投影误差最小的向量u。
那么3D到2D就像这样,寻找两个向量u(1),u(2), 那么所有的投影点,都会在这两个向量的生成子空间上。
所以PCA的目的就是:Reduce from n-dimension to k-dimension, find k vectors onto which to project(投射) the data. so as to minimize the projection error(投影误差).
PCA实现过程:
Reduce data from n-dimensions to k-dimensions:
1.特征归一化.
2.compute 'covariance matrix(协方差矩阵)'
3.compute 'eigenvectors' of matrix .
[U, S, V] = svd(), svd指奇异值分解.
注:在octave中,eig()求特征向量,svd()奇异值分解. 两个方法用在协方差矩阵上会得到同样的结果,因为协方差均值总满足一个数学性质称为对称正定 (symmetric positive definite),但是svd更稳定些。
4.选取U的前k列,组成 Ureduce = U(:, 1:k), z = Ureduce' * x
原始数据的重构(reconstruction),将z还原到x:
如果投影误差很小的话,那么x是约等于xapprox的。(如下图,左是原数据,右是还原的数据点)
如何选择最优的k:
定义平均平方映射误差 (Average Squared Projection Error):
数据的总变化(Total variation in the data):
Typically, choose k to be smallest value so that:
(99% of variance is retained)
或者常用的是0.05这个值,那就是说保留了95%的差异。
方法一:
尝试不同的k,从1开始,直到达到保留的差异。
方法二:
利用[U, S, V] = svd()的S,这是一个对角线矩阵,除了对角线其它位置都是0.
上面目标式子就等价于:
这样计算不同的k值将非常高效.
注:PCA运行在训练集上,而不是交叉验证集和测试集;如果输入特征的比例非常不同,最好在应用PCA之前执行特征缩放。