1. 降维
如下图所示,有一个含m个样本量的数据组,每个样本包含两个特征,我们可以找到一条直线z,将所有的点投影到该条直线上,那么每个样本的两个特征x1和x2就被压缩成一个特征z1,数据集由{(x1(1),x2(1)),……(x1(m),x2(m))}压缩为{(z1(1)),(z1(2))……(z1(m))}。

同时,我们也可以将三维数据转化为二维,即将三维空间中的每个点投影到一个二维平面上。数据集由{(x1(1),x2(1),x3(1)),(x1(2),x2(2),x3(2))……(x1(m),x2(m),x3(m))}压缩为{(z1(1),z2(1)),(z1(2),z2(2))……(z1(m),z1(m))}。

数据降维在可以使得数据更好的可视化的同时,也减小了数据的大小,使其占用内存更小,后续算法运行更快。
2. 主成分分析(Principal Component Analysis ,PCA)
2.1 什么是PCA
主成分分析是最常见的降维算法。在PCA算法中,我们就是要找到一个方向向量,即上一部分中数据投影的直线或平面。该低维向量u(1)需要满足投射平均均方误差最小,投射误差是从特征向量向低维平面做垂线的长度。

如下图所示,如果降维过程是将3D-2D,则需要找到两个方向向量。若是nD-kD,则需找到k个方向向量:u(1),u(2)……u(k)。

PCA与线性回归是两种不同的算法,PCA最小化的目标是投射误差,不进行任何预测;而线性回归最小化目标是预测误差,其目的是为了进行预测。如下图所示,左边是线性回归误差(垂直于x1周轴),右边则是主要成分分析的误差(垂直于方向向量)。

2.2 PCA算法
假设我们要将PCA从n维减小到k维,其中原始数据为:x(1),x(2)……x(m)(shape=(m,n))。x(i)中包含n个特征值。
首先要进行均值归一化,计算每个特征的均值uj,xj=xj−uj。如果不同的特征值处于不同的数量级,还需要将每个特征除以一个值,该值可以是特征的max-min,也可以是特征的标准偏差,以保证所有的特征在一个缩放范围内。
然后由x(i)(n,1)计算协方差矩阵(covariance matrix) Sigma(n,n):
Σ=m1i=1∑n(x(i))(x(i))T
通过奇异值分解(singular value decomposition,SVD)来求解:[U,S,V]=SVD(sigma)。其中计算结果U(n,n)如下图,U 是一个具有与数据之间最小投射误差的方向向量构成的矩阵。

然后从U中选去前k个向量得到一个n*k的矩阵命为Ureduce,则最后计算降维的结果z(i)=UreduceT×x(i)结果维度(k,1)。
下图为该过程的一个总结。

2.3 压缩重现
在数据降维后得到z=UreduceT∗x,将他映射到原来的高维数据:xapprox=Ureduce×z
2.4 主成分数量选择
主成分分析的目的是使得投射的平均误差最小,因此主成分的数量k应满足下面的条件,即压缩后的数据应该维持原数据差异性的99%:
m1∑i=1m∣x(i)∣2m1∑i=1m∣x(i)−xapprox(i)∣2≤0.01
如果这个比例小于1%,就意味着原本数据方差的99%都保留下来了,即上面的值越小越好。我们可以先令k=1,然后进行主要成分分析,获得Ureduce和z,然后计算比例是否小于1%。如果不是的话再令k=2,如此类推,直到找到可以使得比例小于1%的最小k值。
另外,在我们使用SVD算法时[U,S,V]=SVD(sigma),会得到结果S,其中S为一个(n×n)对角矩阵:
S=⎣⎢⎡S11⋮0⋯⋱⋯0⋮Snn⎦⎥⎤
且满足下面的关系:
m1∑i=1m∣x(i)∣2m1∑i=1m∣x(i)−xapprox(i)∣2=1−∑i=1nSii∑i=1kSii≤0.01
因此k值需要满足:∑i=1nSii∑i=1kSii≥0.99。
2.5 一些建议
应该注意以下几点:
- 不要用PCA来减少过拟合
- 不要将PCA看作训练时的默认步骤,应该先尝试原有特征。
假使我们正在针对一张100×100像素的图片进行某个计算机视觉的机器学习,即总共
有10000个特征,则应该按照下面的方法:
- 得到训练数据
用PCA将10000特征进行降维
- 使用逻辑回归进行训练
- 在测试集上测试