1.算法
前面讲了复杂冗长的SVM、Logistics、BP,现在我们讲一个简单易懂的降维算法PCA,也是最广为人知的算法,需要一点简单的线性代数基础,具体看文末链接,已经讲得非常详细了。
其实用一张图就能很好的理解该算法。下图中,红色的样本特征点分布在原本 (x1,x2) 构成的特征空间中,我们的目的就是将这些特征点变换到 (y1,y2) 构成的特征空间,使得,特征点在y1方向上的协方差最小,也就是“分布最分散”,在y1方向上的信息最丰富,最能够区分不同特征点,这样我们可以舍弃y2方向上的信息,就达到了降维的目的。
将一组 N 维向量降为 K 维,其目标是选择 K 个单位正交基,使得原始数据变换到这组基上后,各变量两两间协方差为 0(线性不相关),而变量方差则尽可能大(在正交的约束下,取最大的 K 个方差)。
事实上这个算法计算过程是非常清晰的,如果你使用python的numpy科学包,或者使用matlab,以上算法步骤大概几行就可以完成。
2.性质
缓解维度灾难:PCA 算法通过舍去一部分信息之后能使得样本的采样密度增大(因为维数降低了),这是缓解维度灾难的重要手段;
降噪:当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;
过拟合:PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能加剧了过拟合;
特征独立:PCA 不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立;
3.细节
3.1零均值化
当对训练集进行 PCA 降维时,也需要对验证集、测试集执行同样的降维。而对验证集、测试集执行零均值化操作时,均值必须从训练集计算而来,不能使用验证集或者测试集的中心向量。
其原因也很简单,因为我们的训练集时可观测到的数据,测试集不可观测所以不会知道其均值,而验证集再大部分情况下是在处理完数据后再从训练集中分离出来,一般不会单独处理。如果真的是单独处理了,不能独自求均值的原因是和测试集一样。
另外我们也需要保证一致性,我们拿训练集训练出来的模型用来预测测试集的前提假设就是两者是独立同分布的,如果不能保证一致性的话,会出现 Variance Shift 的问题。
3.2 与 SVD 的对比
这是两个不同的数学定义。我们先给结论:特征值和特征向量是针对方阵才有的,而对任意形状的矩阵都可以做奇异值分解。
链接
【机器学习】降维——PCA(非常详细) - 知乎
https://zhuanlan.zhihu.com/p/77151308
如何理解协方差协方差