主元分析也就是PCA,主要用于数据降维。 比如说有如下的房价数据: 这种一维数据可以直接放在实数轴上: 不过数据还需要处理下,假设房价样本用 然后以均值 以 这个过程称为“中心化”。“中心化”处理的原因是,这些数字后继会参与统计运算,比如求样本方差,中间就包含了 用“中心化”的数据就可以直接算出“房价”的样本方差: ![]() “中心化”之后可以看出数据大概可以分为两类: ![]() 现在新采集了房屋的面积,可以看出两者完全正相关,有一列其实是多余的: ![]() 求出房屋样本、面积样本的均值,分别对房屋样本、面积样本进行“中心化”后得到: ![]() 房价( ![]() ![]() ![]() 可见“中心化”后的数据可以简化上面这个公式,这点后面还会看到具体应用。 把这个二维数据画在坐标轴上,横纵坐标分别为“房价”、“面积”,可以看出它们排列为一条直线: ![]() 如果旋转坐标系,让横坐标和这条直线重合: 旋转后的坐标系,横纵坐标不再代表“房价”、“面积”了,而是两者的混合(术语是线性组合),这里把它们称作“主元1”、“主元2”,坐标值很容易用勾股定理计算出来,比如 ![]() ![]() 很显然 ![]() ![]() 因为“主元2”全都为0,完全是多余的,我们只需要“主元1”就够了,这样就又把数据降为了一维,而且没有丢失任何信息: ![]() 上面是比较极端的情况,就是房价和面积完全正比,所以二维数据会在一条直线上。 现实中虽然正比,但总会有些出入: ![]() 把这个二维数据画在坐标轴上,横纵坐标分别为“房价”、“面积”,虽然数据看起来很接近一条直线,但是终究不在一条直线上: ![]() 那么应该怎么降维呢?分析一下,从线性代数的角度来看,二维坐标系总有各自的标准正交基(也就是两两正交、模长为1的基), ![]() ![]() 在某坐标系有一个点, ![]() ![]() ![]() 只是在不同坐标系中, ![]() 因为 ![]() ![]() 而: ![]() 所以,在某坐标系下分配给 ![]() ![]() ![]() ![]() ![]() 那么在这个坐标系中,就可以降维了,去掉 ![]() ![]() 如果是两个点 ![]() 为了降维,应该选择尽量多分配给 ![]() ![]() 怎么做呢?假设有如下数据: ![]() 上面的数据这么解读,表示有两个点: ![]() 这两个点在初始坐标系下(也就是自然基 ![]() ![]() 图示如下: ![]() 随着坐标系的不同, ![]() 要想尽量多分配给 ![]() ![]() 要求这个问题,先看看 ![]() ![]() 根据点积的几何意义(如何通俗地理解协方差和点积)有: ![]() ![]() 那么: ![]() 上式其实是一个二次型(可以参看如何通俗地理解二次型): ![]() 这里矩阵 ![]() ![]() 其中, ![]() ![]() 而 ![]() ![]() 其中, ![]() 将 ![]() ![]() 因为 ![]() ![]() 所得的 ![]() ![]() 继续回代: ![]() 最初求最大值的问题就转化为了: 感兴趣可以用拉格朗日乘子法计算上述条件极值(参看如何通俗地理解拉格朗日乘子法以及KKT条件),结果是当 ![]() 因此可以推出要寻找的主元1,即: ![]() 总结下: ![]() 同样的思路可以求出: ![]() 上一节的数据: ![]() 我们按行来解读,得到了两个向量 ![]() ![]() 在这个基础上推出了矩阵: ![]() 这个矩阵是求解主元1、主元2的关键。 如果我们按列来解读,可以得到两个向量 ![]() ![]() 即: ![]() 那么刚才求出来的矩阵就可以表示为: ![]() 之前说过“中心化”后的样本方差(关于样本方差、协方差可以参看这篇文章:如何通俗地理解协方差和点积): ![]() 样本协方差为: ![]() 两相比较可以得到一个新的矩阵,也就是协方差矩阵: ![]() ![]() ![]() 可见,协方差矩阵 ![]() ![]() ![]() ![]() 回到使用之前“中心化”了的数据: ![]() 这些数据按行,在自然基下画出来就是: ![]() 按列解读得到两个向量: ![]() 组成协方差矩阵: ![]() 进行奇异值分解: ![]() 根据之前的分析,主元1应该匹配最大奇异值对应的奇异向量,主元2匹配最小奇异值对应的奇异向量,即: ![]() 以这两个为主元画出来的坐标系就是这样的: ![]() 如下算出新坐标,比如对于 ![]() ![]() 以此类推,得到新的数据表: ![]() 主元2整体来看,数值很小,丢掉损失的信息也非常少,这样就实现了非理想情况下的降维。
|
|