大部分内容来源于花书,加入了自己的理解和推导,有问题可以直接提出!
一、内容:
PCA是一个简单的机器学习算法,用于对高维数据的有损降维,假设在Rn 空间中有m个点{x{1},x{3},…,x{m}},如若我们希望将这些点去进行有损压缩,使之变为一种低维的表示,对于每个点x{i}∈Rl。如果l比n小,那么我们便使用了更少的内存来存储原来的数据。因此希望找到一个编码函数,根据输入找到编码,即f(x) = c;同理找到一个解码函数,给定编码重构输入,x≈g(f(x))
【可以理解成有n个特征项的数据集中有m条数据,由于数据集中特征项较多,而有些特征项与预测目标的相关性不大,因此需要选取出相关性大的l个特征项(l<n),使得减少数据量的同时,不影响预测的准确性;接下来要做的就是找到这种映射关系,进而转化为一种编解码函数】
PCA由我们选择的解码函数而定,具体来讲,为了简化解码器,我们使用矩阵乘法将编码映射回Rn,即g( c ) = Dc ≈ x, 其中D∈Rn*l是定义解码的矩阵,此时,由矩阵的知识容易得知,计算出来的D是可以有无穷多个的,因为我们可以按比例放大或者缩小D:,i,即可保持结果不变,为了让所有问题有唯一解,要求D中所有列向量都有单位范数(即都是单位向量,L2范数=1)
二、推导步骤
接下来是计算最优编码,这个问题十分复杂,因此PCA约定D的列向量彼此正交,来简化这个问题,由于l<n所以并不是正交矩阵。接下来,需要明确如何根据一个输入x得到一个最优编码c*。一种方法是最小化原始输入向量和重构g(c*)之间的距离,我们使用范数来量化这个距离,在PCA中用的为L2范数(也就是我们熟知的在二维点下坐标的距离如何计算,c* = argmin||x-g( c )||)
接下来就需要挑选编码矩阵D。要做到这一点,需要先回顾最小化输入和重构之间L2距离的想法。因为用相同的矩阵D对所有的点进行编码,不能够孤立的看待每个点,反之我们必须最小化所有维数和所有点上的误差矩阵的Frobenius范数
所谓Frobenius范数,其实就是整个矩阵的所有元素平方和开根号
上述推导的是l=1的情况,d为XTX最大的特征值对应的特征向量。
当l≠1时,实际上步骤也是相同的,只是dTd=1变成了DTD = E(单位矩阵),此时矩阵D由前l个最大的特征值对应的特征向量组成。