PCA降维方法(一)

总结了PCA方法的原理, 算法, 模块划分及其相关应用。举例分析了其在HNR数据中的降维效果。

背景

机器学习在现实应用中,遇到的需要训练的属性维数常常是成千上万维的,要满足密采样条件所需的样本数目是无法达到的天文数字。此外,许多学习方法也需要计算其距离,而高维空间的距离常常是麻烦的,上述两点也正是很多机器学习方法共同面临的严重障碍,被称为“维数灾难”。缓解维数灾难的一个有效途径是降维。
在降维方法中,基于线性变换来进行降维的方法称为线性降维方法,它们都符合基本形式 Z = W T X Z = W^TX Z=WTX,不同之处就是对W施加的约束不同,这是对低维子空间的性质不同导致的,如上节所讲的多维缩放(MDS)便是要求原样本空间中样本之间的距离在低维空间中得以保存。而下面要讲的PCA则是基于其他性质。

PCA的原理

主成分分析(PCA)是一种无监督的线性降维方法,是最常用的一种降维方法。
其具有的性质是:最近重构性和最大可分性。

\begin{itemize}
\item 最近重构性:样本点到这个超平面的距离都足够近。这个距离近指的是残差小。
\item 最大可分性:样本点在这个超平面上的投影都尽可能分开。
\end{itemize}

主成分分析便可基于上述两个性质分别推出其投影矩阵。下面从最大可分性出发来进行推导:
首先假定样本进行了中心化,即 ∑ i x i = 0 \sum_ix_i = 0 ixi=0,在假定投影变换后得到的新坐标系为 { w 1 , w 2 , ⋯   , w d ′ } \{w_1, w_2, \cdots, w_{d'}\} {w1,w2,,wd},其中 w i w_i wi是标准正交基向量。
样本点在 x i x_i xi在新空间中超平面上的投影是 W T x i W^Tx_i WTxi,为了使所有样本点的投影尽可能分开,则应该使投影后的样本点的方差最大化。而投影后的样本点的协方差矩阵使 ∑ i W T x i x i T W \sum_i W^Tx_ix_i^TW iWTxixiTW,从而可得到优化目标为:
max ⁡ W t r ( W T X X T W ) , s . t . W T W = I \max_W tr(W^TXX^TW), s.t. W^TW=I Wmaxtr(WTXXTW),s.t.WTW=I
使用拉格朗日乘子法可得:
X X T w i = λ i w i XX^Tw_i = \lambda_iw_i XXTwi=λiwi
于是只需对协方差矩阵 X X t XX^t XXt进行特征值分解,取其中最大的d’个特征值所对应的特征向量构成 W ∗ = ( w 1 , w 2 , ⋯   , w d ′ ) W^* = (w_1, w_2, \cdots, w_{d'}) W=(w1,w2,,wd),即为主成分分析的解。

另外,PCA也可看做是逐一选取方差最大方向,即首先对协方差矩阵 ∑ i x i x i T \sum_i x_ix^T_i ixixiT做特征值分解,取最大特征值对应的特征向量 w 1 w_1 w1;再对 ∑ i x i x i T − λ 1 w 1 w 1 T \sum_i x_ix^T_i - \lambda_1w_1w_1^T ixixiTλ1w1w1T做特征值分解,取最大特征值对应的特征向量 w 2 w_2 w2; ⋯ \cdots 。依此类推,可以得到n个这样的坐标,通过这种方式获得的新的坐标轴,可以发现,大部分方差都包含在前面d’个坐标轴中,后面的坐标轴所含的方差近乎为0。而由W各分量正交及 ∑ i = 1 m x i x i T = ∑ j = 1 d w j w j T \sum^m_{i=1}x_ix^T_i = \sum^d_{j=1}w_jw^T_j i=1mxixiT=j=1dwjwjT可知,上述逐一选取方差最大方向的做法与直接选取最大d’个特征值等价。

PCA算法

输入:样本集 D = { x 1 , x 2 , ⋯   , x m } D = \{x_1, x_2, \cdots, x_m\} D={x1,x2,,xm};低维空间维数d’.
过程:
\begin{enumerate}
\item 对所有样本进行中心化: x i ← x i − 1 / m ∑ i = 1 m x i x_i \gets x_i - 1/m\sum^m_{i=1} x_i xixi1/mi=1mxi;
\item 计算样本点的协方差矩阵;
\item 对协方差矩阵 X X T XX^T XXT做特征值分解;(实践中常通过对X进行奇异值分解来代替协方差矩阵的特征值分解)
\item 取最大的d’个特征值所对应的特征向量 w 1 , w 2 , ⋯   , w d ′ w_1, w_2, \cdots, w_{d'} w1,w2,,wd.
输出:投影矩阵 W ∗ = ( w 1 , w 2 , ⋯   , w d ′ ) W^* = (w_1, w_2, \cdots, w_{d'}) W=(w1,w2,,wd).
\end{enumerate}
对于输入d’的设定,可以由用户事先设点;也可以在低维空间对k近邻或其他开销较小的分类器进行交叉验证;也可以通过重构阈值t来得到,例如t = 95%,然后取使下式成立的最小d’值:
∑ i = 1 d ′ λ i ∑ i = 1 d λ i ≥ t . \frac{ \sum^{d'}_{i=1} \lambda_i}{\sum^{d}_{i=1} \lambda_i} \geq t . i=1dλii=1dλit.

PS: PCA算法仅需保留 W ∗ W^* W与样本的均值向量(保存均值向量是为了通过向量减法对新样本进行同样的中心化)即可通过简单的向量减法和矩阵-向量乘法将新样本投影到低维空间中。在实践中我们用训练样本来训练得到 W ∗ W^* W与样本的均值向量,然后再直接应用到测试样本中,使得测试样本能够降维到与训练样本相同的低维空间中,同时也避免了测试样本需要再次训练的麻烦。

PCA应用,优势,局限性

应用

\begin{itemize}
\item 降维,使样本的采样密度增大,缓解维数灾难
\item 一定程度上起到去噪作用,当数据收到噪声影响时,最小的特征值所对应的特征向量往往与噪声有关
\end{itemize}

优势

\begin{itemize}
\item 无参数限制
\item 原理简单,易于理解与实现
\end{itemize}

局限性

由于PCA算法是一种线性降维方法,其假设高维空间到低维空间的函数映射是线性的,然而再某些情况下,可能要非线性的映射才能找到恰当的低纬嵌入。(这个问题可以使用KPCA来解决)

应用

下面将研究PCA在10类手写数字识别问题中的应用。
我使用的数据集是HNR,降维后使用softmax来进行训练与测试,通过比较其测试准确度和训练时间来评价其优劣,比较的对象有自己写的PCA类,sklearn中的PCA类,不使用降维直接训练,以及使用PCA类是不知道d’这五种方法。得到的结果如下:
在这里插入图片描述
分析上述结果可知,降维后的数据来进行训练可以减少训练时间,即使会损失少量精度。而对于重构阈值得到的结果,则甚至是精度提高了,重构阈值得到的最优d’为1974,原来的则是2025,可以说是只降低了一点点。

降低不同维度对训练的影响

下面我们对比降维至50维,250维,550维,1050维,1350维以及不降维的训练结果比较:
在这里插入图片描述
分析上面结果,可以看出数据的维数降得越低,训练精度便会越低,但训练时间也会随着减少,因此我们在实际应用中,要对训练时间和精度两者之间进行权衡来确定该降到多少维。

参考文献

  1. 周志华.机器学习.清华大学出版社,2016.

你可能感兴趣的:(机器学习)