PCA(principal component analysis)主成分分析,是一种常见的降维方法,其目的是在尽量保留信息的情况下,将高纬数据降低为低维度。
理解PCA之前,先理解下常见的矩阵运算。
矩阵相乘的一种物理解释,就是将右边的矩阵中的每一列列向量投影变换到左边矩阵中每一行行向量为基所表示的空间中去。注意,基并不一定是正交的,任何两个线性无关的向量都可以作为一组基,常常选用正交(内积为0,或者说互相垂直)模为1的基,是为了便于运算和说明问题,下面举例说明
$
A=
\left[
\begin{matrix}
a_{1} & a_{2} & \cdots & a_{M}
\end{matrix}
\right]
,
B=
\left[
\begin{matrix}
b_{1} \\
b_{2} \\
\vdots \\
b_{R}
\end{matrix}
\right]
$
$
BA=
\left[
\begin{matrix}
b_{1} \\
b_{2} \\
\vdots \\
b_{R}
\end{matrix}
\right]
\left[
\begin{matrix}
a_{1} & a_{2} & \cdots & a_{M}
\end{matrix}
\right]
=
\left[
\begin{matrix}
b_{1}a_{1} & b_{1}a_{2} & \cdots & b_{1}a_{M} \\
b_{2}a_{1} & b_{2}a_{2} & \cdots & b_{2}a_{M} \\
\vdots & \vdots & \ddots & \vdots \\
b_{R}a_{1} & b_{R}a_{2} & \cdots & b_{R}a_{M} \\
\end{matrix}
\right]
$
其中$b_{i}$是一个N维行向量,表示第i个基,$a_{j}$是一个N维列向量,表示第j个原始数据,从上面可知,矩阵相乘结果是$R\times M$的向量,最终的行维度是R,也就是变换后的维度,所以R决定了变换后的维度。可以理解为,可以将一组N维的数据变换到更低的维度空间上,变换后的维度取决于基的数量,R<N的情况下,就是降维度。
到此,降维目标转化为:寻找一组基,个数为R,将原始数据投影到该组基表示的空间中,使得维度得到降低,并尽量保留原始信息。
尽量保留原始信息拆解为两点,1,投影每个基后原始数据尽量分散,可以用方差表示,方差越大越好;2,在不同基上的投影向量线性相关越弱越好,用协方差表示,协方差为0表示相互独立,所以尽量选正交基;
至此,降维目标转化为:寻找一组单位正交基,使得原始数据投影到这组基表示的空间中,各字段两两的协方差为0,而字段的方差则尽可能大
假设,X是原始数据,P是待寻找正交基,Y=PX,Y是变换后的投影结果,希望Y的各行向量(每行代表一个字段)自己的方差尽量大,各行向量之间协方差为0
方差和协方差的数学表示如下
$
Var(x)=\frac{1}{m}\Sigma_{i=1}^{m}(x_{i}-\mu)^2=\frac{1}{m}(x-\bar{x})(x-\bar{x})^{T}
\\
Cov(x, y)=\frac{1}{m}\Sigma_{i=1}^{m}(x_{i}-\mu(x))(y_{i}-\mu(y))=\frac{1}{m}(x-\bar{x})(y-\bar{y})^T
$
根据矩阵相乘的运算规则,假设我们有m个n维的数据记录,可以用一个n行m列的矩阵X表示,每一列表示一个数据记录点,设$C=\frac{1}{m}(X-\bar{X})(X-\bar{X})^{T}$,则C是一个对称矩阵,其对角线分别是各字段的方差,而第i行j列和第j行i列相同,表示i行和j行两个字段(每一行代表一个字段)的协方差
因此,Y=PX,Y是变换后的投影结果,希望Y的各行向量自己的方差尽量大,各行向量之间协方差为0,即等价于求得$\frac{1}{m}(Y-\bar{Y})(Y-\bar{Y})^{T}$对角化,即除对角线外其他元素都为0,并且对角线上元素按大小从上到下排列,而又有,
$
\bar{Y}=\frac{1}{m}Y=\frac{1}{m}PX = P\frac{1}{m}X = P\bar{X}
\\
\frac{1}{m}(Y-\bar{Y})(Y-\bar{Y})^{T} \\
=\frac{1}{m}(PX-P\bar{X})(PX-P\bar{X})^{T} \\
=\frac{1}{m}P(X-\bar{X})(X-\bar{X})^TP^T \\
=P(\frac{1}{m}(X-\bar{X})(X-\bar{X})^T)P^T
$
因此,对角化$\frac{1}{m}(Y-\bar{Y})(Y-\bar{Y})^{T}$等价于对角化$P(\frac{1}{m}(X-\bar{X})(X-\bar{X})^{T})P$,设$C=\frac{1}{m}(X-\bar{X})(X-\bar{X})^{T}$,
这时优化目标为,寻找一个矩阵P,满足$PCP^{T}$是一个对角阵,并且对角元素从大到小依次排列,那么P的前K行就是要寻找的基,用这前K行组成的矩阵乘以X就可以把X从N维降低到K维。
根据线性代数的知识, C是一个实对称矩阵,假设为n*n,存在n个正交单位特征向量和特征值,把e按列组成矩阵,
$
E=(e_{1}, e_{2}, …, e_{n})
$
$
E^{T}CE= \Lambda=
\left[
\begin{matrix}
\lambda_{1} & & & \\
& \lambda_{2} & & \\
& & \ddots & \\
& & & \lambda_{n} \\
\end{matrix}
\right]
$
可知,$P=E^{T}$
P是C的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照$\Lambda$中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y
线性代数方面,结一下PCA的实现步骤:
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵$C=\frac{1}{m}XX^{T}$
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX
即为降维到k维后的数据
机器学习中的数学-PCA相关
坚持原创技术分享,您的支持将鼓励我继续创作!