将由以下几个部分介绍PCA相关知识:
(一)什么是PCA?
(二)PCA的目的是什么?
(三)通俗理解PCA
(四)预备知识
(五)PCA的数学原理
(六)python代码示例
一、什么是PCA?
PCA: 全名 Principal components analysis,主成分分析。主要用于降维,保留低阶主成分,忽略高阶主成分。
二、PCA的目的是什么?
1、在机器学习中降维,降低特征复杂度
2、提取主要特征信息
3、去除特征之间的冗余信息
三、通俗理解PCA
PCA 是为了降低特征的维度。在实际工作中,可能会遇到特征维数过多,且部分特征具有一定相关性。比如:学习时间与学习成绩,一般学习时间越长越容易取得比较好的成绩,即学习时间与成绩呈正相关,可以找一个维度来表现这两个特征,而不会带来过多的信息损失。
PCA最大可分思想:
假设有数据集是$n$维的,共有$m$个数据$left(x_{1}, x_{2}, dots, x_{m} ight)$。若想要将这$m$个数据从$n$降到$n^{prime}$维,希望这$m$个$n^{prime}$维数据尽可能代表原始数据集。
考虑最为简单的情况,就是$n=2, n^{prime}=1$。
上图中,将所有的数据点,投影到$u_{1}$会比投影到$u_{2}$上更分散一些,这就是最大可分性。
四、预备知识
基变换的概念,本人初次接触是在机器人运动学分析中遇到的,在多机械臂运动控制中,常常需要绝对坐标系与相对坐标系的变换。但是此处的基变换适用范围要更广,认识也要更为深刻。
过渡矩阵:
$x_{1},x_{2},...,x_{n}$是$V^{n}$空间内的一组旧基,$y_{1},y_{2},...,y_{n}$是$V^{n}$空间内的一组新基,则两者之间的关系可以用下式表示:
egin{equation}
left{egin{array}{l}{y_{1}=c_{1} x_{1}+c_{12} x_{2}+ldots+c_{1n} x_{n}} \ {y_{2}=c_{21} x_{1}+c_{22} x_{2}+ldots+c_{2n} x_{n}} \ {vdots} \ {y_{n}=c_{n1} x_{1}+c_{n2} x_{2}+ldots+c_{n n} x_{n}}end{array}
ight.
end{equation}
同时可以写成矩阵的形式:
egin{equation}
Y=left(y_{1}, y_{2}, ldots, y_{n}
ight)^{T}=Cleft(x_{1}, x_{2}, ldots, x_{n}
ight)^{T}=C X
end{equation}
由此可以想到,向量在X坐标下,如何变换到Y坐标下。
(自行分析,很简单)
下面是理解的重点:
上面的情况是新旧基的数量是相同的,如果将基的数目设置为不同,即Y中基的数目不是$n$,而是小于$n$的值,那么就可以降低维度。
方差与协方差:
根据前面PCA最大可分的思想,是将原始数据向新的基上面投影,求取方差,使得方差最大。通过这种方式来选取新的基。
egin{equation}
operatorname{Var}(a)=frac{1}{m} sum_{i=1}^{m}left(a_{i}-mu
ight)^{2}
end{equation}
在高维的情况下来思考的话,就是将数据在一个方向上投影,这个方向上的投影点方差最大,这样很容易就可以选择出第一个基,但是在选择第二个基的时候,按照这种方法,选择的第二个基会跟第一个基“几乎重合在一起”。这时候就会想到协方差:
egin{equation}
operatorname{Cov}(a, b)=frac{1}{m} sum_{i=1}^{m} (a_{i}-mu_{a}) (b_{i}-mu_{b})
end{equation}
协方差为0,则两组基是正交的。(这不就是求取的两个向量之间的夹角吗)
关于均值与基变换的一点:
特征零均值化:就是所有的数据都减去的均值,数据集变成了均值为0
egin{equation}
left(mu_{x}, mu_{y}
ight)=frac{1}{m} sum_{i=1}^{m}left(x_{i}, y_{i}
ight)
end{equation}
egin{equation}
left(x_{i}^{prime}, y_{i}^{prime}
ight)=frac{1}{m} sum_{i=1}^{m}left(left(x_{i}, y_{i}
ight)-left(mu_{x}, mu_{y}
ight)
ight)
end{equation}
新的基$(z, n)$为单位向量,$left(x_{0}, y_{0} ight)$在新的基上的投影为$left(x_{0}, y_{0} ight) star(z, n)$
egin{equation}
left(mu_{x_{z}}, mu_{y_{n}}
ight)=frac{1}{m} sum_{i=1}^{m}left(x_{i}^{prime}, y_{i}^{prime}
ight) cdot(z, n)=frac{1}{m}(z, n) sum_{i=1}^{m}left(x_{i}^{prime}, y_{i}^{prime}
ight)=(0,0)
end{equation}
如果一开始数据已经进行了特征零均值化,那么在任何基的投影上的均值还是为0
协方差矩阵对角化:
数据都是经过特征零均值化的,所以公式里面不再保留$mu$。
设$Y$为原始数据$X$做完PCA降维后的数据,满足$Y=X P$(矩阵乘法相当于映射,若$P$为的列向量为基向量,那么就相当于映射到新的坐标系),$Y_{c}$,$X_{c}$分别为对应的协方差矩阵,那么
egin{equation}
egin{array}{l}{Y_{c}=frac{1}{m} Y^{T} Y} \ {=frac{1}{m}(X P)^{T} X P} \ {=frac{1}{m} P^{T} X^{T} X P} \ {=P^{T}left(frac{1}{m} X^{T} X
ight) P} \ {=P^{T} X_{c} P}end{array}
end{equation}
所以该问题就变成了只需要计算出$P$,使$Y_{c}=P^{T} X_{c} P$满足对角矩阵的条件即可。而$X_{c}$为实对称矩阵,我们只需要对它做矩阵对角化即可。