本文将主要介绍PCA算法的数学推导过程
上一篇文章提到,PCA算法认为降维就是一个简单的linear function,它的input x和output z之间是linear transform,即,PCA要做的,就是根据把W给找出来(未知)
为了简化问题,这里我们假设z是1维的vector,也就是把x投影到一维空间,此时w是一个row vector
,其中表示的第一个row vector,假设的长度为1,即,此时就是在方向上的投影
那我们到底要找什么样的呢?
假设我们现在已有的宝可梦样本点分布如下,横坐标代表宝可梦的攻击力,纵坐标代表防御力,我们的任务是把这个二维分布投影到一维空间上
我们希望选这样一个,它使得经过投影之后得到的分布越大越好,也就是说,经过这个投影后,不同样本点之间的区别,应该仍然是可以被看得出来的,即:
下图给出了所有样本点在两个不同的方向上投影之后的variance比较情况
当然我们不可能只投影到一维空间,我们还可以投影到更高维的空间
对来说:
串起来就得到,而分别是的第1,2,...个row,需要注意的是,这里的必须相互正交,此时是正交矩阵(orthogonal matrix),如果不加以约束,则找到的实际上是相同的值
求解PCA,实际上已经有现成的函数可以调用,此外你也可以把PCA描述成neural network,然后用gradient descent的方法来求解,这里主要介绍用拉格朗日乘数法(Lagrange multiplier)求解PCA的数学推导过程
注:和均为列向量,下文中类似表示的是矢量内积,而表示的是矩阵相乘
目标:maximize ,条件:
首先计算出:
然后计算maximize的对象:
其中
当然这里想要求的最大值,还要加上的约束条件,否则可以取无穷大
令,它是:
使用拉格朗日乘数法,利用目标和约束条件构造函数:
对这个vector里的每一个element做偏微分:
整理上述推导式,可以得到:
其中,是S的特征向量(eigenvector)
注意到满足的特征向量有很多,我们要找的是可以maximize 的那一个,于是利用上一个式子:
此时maximize 就变成了maximize ,也就是当的特征值最大时对应的那个特征向量就是我们要找的目标
结论:是这个matrix中的特征向量,对应最大的特征值
在推导时,相较于,多了一个限制条件:必须与正交(orthogonal)
目标:maximize ,条件:
结论:也是这个matrix中的特征向量,对应第二大的特征值
同样是用拉格朗日乘数法求解,先写一个关于的function,包含要maximize的对象,以及两个约束条件
对的每个element做偏微分:
整理后得到:
上式两侧同乘,得到:
其中,
而由于是vector×matrix×vector=scalar,因此在外面套一个transpose不会改变其值,因此该部分可以转化为:
注:S是symmetric的,因此
我们已经知道满足,代入上式:
因此有,,,又根据
可以推得
此时就转变成了,即
由于是symmetric的,因此在不与冲突的情况下,这里选取第二大的特征值时,可以使最大
结论:也是这个matrix中的特征向量,对应第二大的特征值
神奇之处在于,即z的covariance是一个diagonal matrix,推导过程如下图所示
PCA可以让不同dimension之间的covariance变为0,即不同new feature之间是没有correlation的,这样做的好处是,减少feature之间的联系从而减少model所需的参数量
如果你把原来的input data通过PCA之后再给其他model使用,那这些model就可以使用简单的形式,而无需考虑不同dimension之间类似这些交叉项,此时model得到简化,参数量大大降低,相同的data量可以得到更好的训练结果,从而可以避免overfitting的发生
本文主要介绍的是PCA的数学推导,如果你理解起来有点困难,那下一篇文章将会从另一个角度解释PCA算法的原理~