SL-主成分分析(PCA)
本文主要是对于刘建平 这篇文章 的笔记,参考《深度学习》一书中的记号
主成分分析(Principal components analysis, PCA)是最常用的降维手段,也是一种典型的无监督学习手段。思路就是对于原空间上的数据点,找到一个合适的子空间,用更小的向量来表示这些数据而尽可能多地保留原数据的信息。
假设原来的设计矩阵 (Xin R^{m imes n}) ,这 m 个数据的均值为 0;我们希望得到的向量长度为 (l) ,定义还原/解码矩阵 (Din R^{n imes l}) ,也就是说我们最终还原出来的向量为 (hat x=Dw),其中 (w) 为我们压缩之后的表示向量。
在进行计算之前,先要看看表示向量 (w) 从何而来,这就需要对 (D) 与更深的了解 (hat x=sum^l w_id_i) ,也就是说,矩阵 D 的每一列是我们表示空间的基向量(在原空间中的表示),为使得结果唯一,我们要求这些基向量互相正交且长度为 1。即 (D'D=I) 。那么如何得到表示向量 (w) 呢?显然是把 x 在各个基向量上投影,(w_i=d_i'x) 即 (w=D'x)。
推导 1:基于最小投影距离
显然,我们希望「信息损失」尽可能小,也就是 (hat x) 与 (x) 之间尽可能接近,用二范数来衡量,也就是说,我们希望最小化
整理该式
因此
到这里就是一个典型的优化问题(拉格朗日乘子法),具体来说,最优的 D 就是 (X'X) 最大 (l) 个特征值所对应的特征向量所组成的矩阵。
推导 2:基于最大投影方差
以上给出了一种推导方法,下面基于最大投影方差的思想给出另一个推导。
首先,我们的目的是希望各投影点尽可能的分散,这种分散程度我们可以用样本点恶协方差矩阵来描述,然而这给优化带来了难度。因此,我们取每一个样本点的「方差」:即 ((D'x-D'ar x)'(D'x-D'ar x)=x'DD'x) 这是因为我们已经将 (x) 中心化了。因此,我们的希望最大化
可以看到可上面的目标函数是一致的。
PCA 算法流程
- 首先对于样本点进行中心化
- 计算样本协方差矩阵 (X'X)
- 特征值分解,取其中组最大的 (l) 个特征值所对应的特征向量构成矩阵 (D)
- 对每个样本进行计算 (w_i=D'x_i)
其中,我们可以预先定义需要降维的程度 (l),也可以根据特征值的分布以保证数据损失率控制在一个可接受的范围内,即要求选定的 (l) 满足
核主成分分析KPCA介绍
回到我们在推导过程中的目标函数中来
使用拉格朗日乘子法并求导,整理为
这样就可以看到 D 是样本协方差矩阵的特征向量,而 (Lambda) 是特征向量构成的对角矩阵。
有时候,我们很难再一个超平面上对于数据集进行较好的投影,因此考虑借用支持向量机中核函数的思想,也就是说,上式变为
也就是说,我们把问题从对于 (X'X) 的特征分解变为一个在更高维的空间中的协方差矩阵分解。当然,这样会带来计算的复杂性。