总结了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
xi←xi−1/m∑i=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λi∑i=1d′λi≥t.
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维以及不降维的训练结果比较:
分析上面结果,可以看出数据的维数降得越低,训练精度便会越低,但训练时间也会随着减少,因此我们在实际应用中,要对训练时间和精度两者之间进行权衡来确定该降到多少维。
参考文献
- 周志华.机器学习.清华大学出版社,2016.