降维可以把冗余的数据维度降低,使用较少的计算机内存,使学习算法加速;降维也能实现数据的可视化,将高维数据降到二维或者三维。
1、主成分分析法(PCA)
主成分分析法(PCA)是最常见的降维算法。
PCA 所做的就是寻找一个低维的投影面,对数据进行投影,使得点到投影面的距离的平方能够最小化。其中,点到投影面的距离叫做投影误差。在应用PCA之前,通常要先进行均值归一化和特征规范化 ,使得特征 x1 和 x1 均值为0,数值在可比较的范围之内。
(1)二维降到一维: 希望找到一条线,把所有的数据映射到这条线上,就可以直接测量这条线上每个样本的位置。只需要一个数字,也就是新特征变量 z1 能够表示这条绿线上每一个点的位置 。
(2)三维降到二维,就是把所有数据投影到一个二维平面上, 最后 为了表示一个点在平面上的位置只需要两个数 。两个数来表示平面上一个点的位置:即 z1 和 z2 ,这两个数就是新的特征向量。
2、主成分分析法的实现
主成分分析的基本思想就是:使用一组新的互相无关的特征来代替原来的有一定相关性的特征, 当然我们希望这组线性无关的特征里的第一个特征 F1 能更多的反映原来的性能指标,最经典的方法就是用 F1 的方差来表达,方差越大,表示 F1 包含的信息越多。因此按照方差大小进行排序, F1 的方差应该是最大,称为第一主成分,需要注意的是出现在第一主成分中的信息就不需要再出现在其余的主成分里。再依次选取第二主成分、第三主成分等。最后得到的这些主成分之前不仅不相关,而且它们的方差依次递减,即所含的信息量依次递减。在应用中,可以根据需要选取前几个最大的主成分,这样做既大幅度减少了特征的数量,又保留了大部分的信息,效率会大大提高。 主成分分析问题的描述: 想要将 n 维数据降至 k 维,目标是找到向量 u(1),u(2),…,u(k) 使得总的投射误差最小。
主成分分析法与线性回归算法是两个不同的算法。
如图所示,左边的图像是线性回归的图像,它要求的是 y 的实际值与预测值之间的距离的最小值,是点到直线的在 y 轴方向上的最小值;右边的图像是主成分分析的图像,它要求的是点到线的投影的最小值,即点到线的 x1 和 x2 两个方向上的最小值,即垂直距离的最小值。
主成分分析法的实现分以下几步:
(1)均值归一化
需要计算出所有特征的均值 μ j ,如果特征是在不同的数量级上,还需要计算标准差 σ 2 。
x(i)j=x(i)j−μjsj
(2)k个向量的选择
首先要计算协方差矩阵:
Ξ =1m∑ni=1(x(i))(x(i))T
该矩阵 n*n 维度的矩阵。
然后计算协方差矩阵的特征向量。在Octave或者MATLAB中,可以使用奇异值分解来求解:
[U,S,V]=svd( Ξ )
其中 U 矩阵也是 n*n 维度的矩阵,U 矩阵的前 k个列向量( Ureduce )就是需要选取的k 个方向。
(3)新的特征 zk 的计算
z(i)=UTreduce⋅x(i)
最后的到的结果为 k*1 维度的。
3、降维的维数 k 的选取
主成分分析是减少投射的平均均方误差,我们希望在平均均方误差误差与训练集方差的比例尽可能小的情况下选择尽可能小的 K 值。
1m∑mi=1||x(i)−x(i)approx|21m∑mi=1||x(i)||2≤0.01
其中,这里的0.01表示的是原来数据的99%的差异性,当然也可以选择95%、90%等等。这种方法计算k,需要不停的改变k,然后运行一次PCA算法,看看是否符合要求,过程太繁琐。
一般需要借助奇异值分解里得到的矩阵S,S矩阵是一个主对角线矩阵,这里只需要不停的改变k,计算右侧不等式是否满足条件即可,不需要反复运行PCA算法。
不等式为:
∑ki=1Sii∑mi=1Sii≥0.99
这里的99%表示的是保留了原来数据的99%的差异性。
4、注意事项
举个栗子,比如在监督学习中,x 有10000个特征,先不去考虑 y ,将训练集 x 降为1000维,这样就得到新的训练集,用新的训练集去拟合或者分类。PCA降维只用在训练集,不应用在交叉训练集和测试集。
在使用PCA之前要先考虑,如果不加PCA是什么效果,确定加了PCA 会有用时,再加入PCA。