奇异值与主成分分析.docx
奇异值与主成分分析(PCA):主成分分析在上一节里面也讲了一些,这里主要谈谈如何用SVD去解 PCA的问题。PCA的问题其实是一个基的变换,使得变换后的数据有着最大的方 差。方差的大小描述的是一个变量的信息量,我们在讲一个东西的稳定性的时 候,往往说要减小方差,假如一个模型的方差很大,那就说明模型不稳定了。 但是对于我们用于机器学习的数据(主要是训练数据),方差大才有意义,不 然输入的数据都是同一个点,那方差就为。了,这样输入的多个数据就等同于 一个数据了。以下面这张图为例子:这个假设是一个摄像机采集一个物体运动得到的图片,上面的点表示物体运动的位置,假如我们想要用一条直线 去拟合这些点,那我们会选择什么方向的线呢?当然是图上标有signal的那 条线。假如我们把这些点单纯的投影到x轴或者y轴上,最终在x轴与y轴上 得到的方差是相像的(由于这些点的趋势是在45度左右的方向,所以投影到 x轴或者y轴上都是类似的),假如我们使用原来的xy坐标系去看这些点,简 洁看不出来这些点真正的方向是什么。但是假如我们进行坐标系的变化,横轴 变成了 signal的方向,纵轴变成了 noise的方向,那么就很简洁觉察什么方向的 方差大,什么方向的方差小了。一般来说,方差大的方向是信号的方向,方差小的方向是噪声的方向, 我们在数据挖掘中或者数字信号处理中,往往要提高信号与噪声的比例,也就 是信噪比。对上图来说,假如我们只保存signal方向的数据,也可以对原数据 进行不错的近似了。PCA的全部工作简洁点说,就是对原始的空间中挨次地找一组相互正交 的坐标轴,第一个轴是使得方差最大的,其次个轴是在与第一个轴正交的平面 中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的, 这样假设在N维空间中,我们可以找到N个这样的坐标轴,我们取前r个去近 似这个空间,这样就从一个N维的空间压缩到r维的空间了,但是我们选择的 r个坐标轴能够使得空间的压缩使得数据的损失最小。还是假设我们矩阵每一行表示一个样本,每一列表示一个feature,用 矩阵的语言来表示,将一个m * n的矩阵A的进行坐标轴的变化,P就是一个 变换的矩阵从一个N维的空间变换到另一个N维的空间,在空间中就会进行一 些类似于旋转、拉伸的变化。nixn而将一个m * n的矩阵A变换成一个m * r的矩阵,这样就会使得原来 有n个feature的,变成了有r个feature 了 (r < n),这r个其实就是对n 个feature的一种提炼,我们就把这个称为feature的压缩。用数学语言表示 就是:A p - A但是这个怎么和SVD扯上关系呢?之前谈到,SVD得出的奇异向量也是从奇异值由大到小排列的,按PCA的观点来看,就是 方差最大的坐标轴就是第一个奇异向量,方差次大的坐标轴就是其次个奇异向 量我们回忆一下之前得到的SVD式子:A H U工尸nixnrxr rxw在矩阵的两边同时乘上一个矩阵V,由于V是一个正交的矩阵,所以V转置乘以V得到单位阵I,所以可以化成后 面的式子4, 么 -么4,匕 x Unr4,匕 x Unr将后面的式子与A * P那个m * n的矩阵变换为m * r的矩阵的式子比照看看,在这里,其实V就是P,也就是一个变化的向量。这里是将一个m * n的矩阵压缩到一个m * r的 矩阵,也就是对列进行压缩,假如我们想对行进行压缩(在PCA的观点下,对 行进行压缩可以理解为,将一些相像的sample合并在一起,或者将一些没有 太大价值的sample去掉)怎么办呢?同样我们写出一个通用的行压缩例子:Arxn这样就从一个m行的矩阵压缩到一个r行的矩阵了,对SVD来说也是一样的,我们对SVD分解的式子两边乘以U的转置U'U 1A V1 rxmrxr rxn这样我们就得到了对行进行压缩的式子。可以看出,其实PCA几乎可以说是对SVD的一个包装,假如我们实现了 SVD,那也就实现了 PCA 了,而且更好的地方是,有了 SVD,我们就可以得到 两个方向的PCA,假如我们对A,A进行特征值的分解,只能得到一个方向的 PC Ao