一、什么是PCA
PCA即Principal Components Analysis,是一种常用的降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。为了更加直观的理解,下文中以二维数据来对PCA的原理进行解释。
PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。
上图中蓝色点为样本点,倘若我们以常规的坐标系来表示样本,每个样本有两个特征[x1,x2]。但是通过观察可以发现,这些样本点位于同一条直线x_new1,倘若以这条直线和垂直于这条直线的直线x_new2为坐标轴(不知道为啥看起来不垂直,但是这两条线的斜率之积确实为-1😅),那么每个样本只具有在x_new1方向上的一个特征,在x_new2方向上的值均为0。这就完成了一个数据降维的工作。
上面的例子可能有些极端,因为样本数据很难正好都位于一条直线上,让我们来看看下面这个更加普遍的例子,当然还是二维数据。
蓝色点为原始样本点,我们可以通过PCA找到一个新的坐标轴(上图中蓝色和橙色的直线),但是可以发现在新的坐标轴下,这些样本点仍旧需要两个特征来表示,似乎并没有起到降维的作用。因此PCA接下来的操作是,将原始样本点在蓝色直线上做投影(橙色点所示),用投影点代替原始点进行之后的运算,变相起到了降维的作用。
为什么要在新的坐标轴下进行投影而不在原先的坐标轴下进行投影呢?当样本较多或者分布较为集中时,在原先坐标轴下映射会带来一些问题,存在一些样本点可能投影到坐标轴上同一位置,发生重合,那么这些样本点就不再具有价值。又或是这些样本点虽然投影之后没重合但是在坐标轴上分布异常集中,这也为后面的任务带来困难。因此PCA的作用就是为了寻找一个完美的坐标轴,使得样本点投影时尽可能少的重合,也尽可能的分散。
二、协方差和协方差矩阵
在深入了解PCA的具体原理之前,我们需要理解协方差和协方差矩阵的概念。相信大家对均值,标准差和反差的概念非常熟悉,这里随便贴出这三者的计算公式:
$$
均值:\tilde{X} = \frac{\sum_{i=1}^nXi}{n}\\
标准差:s = \sqrt{\frac{\sum{i=1}^n(Xi-\tilde{X})^2}{n-1}}\\
方差:s^2=\frac{\sum{i=1}^n(X_i-\tilde{X})^2}{n-1}
$$
关于标准差和方差的分母问题,可能有些同学(包括博主在内)比较疑惑为什么分母是n-1而不是n。按照方差原本的定义,分母确实应该是n,但是这样计算的到的结果会存在偏差,具体的公式推导可以看看
让我们暂定分母是n-1,协方差的计算公式为:
$$
协方差:cov(X,Y)=\frac{\sum_{i=1}^n(X_i-\tilde{X})(Y_i-\tilde{Y})}{n-1}
$$
公式上的直观感受是,方差是用来用来衡量单个随机变量,而协方差是用来衡量两个随机变量,当协方差中两个随机变量相同时,就得到了方差的计算公式,因此方差时协方差的一种特殊情况。关于协方差的作用,通俗的解释是描述两个变量间的变化关系。
1.两个随机变量同时变大或同时变小,这时协方差就是正的。
2.两个随机变量,一个变大的同时另一个变小,这时协方差就是负的。
对每个样本点的协方差的值,计算期望,这两个随机变量的整体协方差。因此,从数值上来看,协方差越大,两个变量的同向程度也就越大,反之亦然。
清楚了协方差后,可以给出协方差矩阵的具体概念。顾名思义,协方差矩阵是由协方差构成的矩阵,由于协方差只能描述两个随机变量之间的变化关系,当随机变量个数大于两个时,单靠一个协方差的值无法衡量所有随机变量之间的关系,因此需要计算每个随机变量与所有随机变量(包括它自己)的协方差的值,这些值构成的矩阵就是协方差矩阵。当有k个随机变量时,协方差矩阵的形式为:
$$
\begin{bmatrix}
cov(X_1,X_1)&cov(X_1,X_2)&\cdots&cov(X_1,X_k)\\
cov(X_2,X_1)&cov(X_2,X_2)&\cdots&cov(X_2,Xk)\\
\vdots&\vdots&\ddots&\vdots\\
cov(X{k-1},X1)&cov(X{k-1},X2)&\cdots&cov(X{k-1},X_K)\\
cov(X_k,X_1)&cov(X_k,X_2)&\cdots&cov(X_k,X_K)
\end{bmatrix}
$$
可以看出,协方差矩阵是一个对角矩阵,并且对角线上的元素是每个随机变量的方差。
还是以二维数据为例,看一下协方差矩阵的具体意义。上图中,上方两张图中的协方差矩阵对角线上的元素相同,表明两张图中的x的方差和y的方差相同。我们知道,当协方差的值为正时表示两个随机变量变化相同,当协方差的值为负时表示两个随机变量变化相反,图中显示的两个随机变量的协方差值为4和-4,对应着上升和下降趋势。
下方两张图中,两个随机变量的协方差的值为0,表示样本的整体分布平行于坐标轴。对角线上的数值差别加大,下方第一张图中,x的方差明显大于y的方差,表示样本沿着x轴更分散,沿着y轴更集中。而下方第二张图正好相反,样本沿着x轴分布更集中,沿着y轴分布更分散。
PCA的目标是找到一个新的坐标轴,使得数据分布在其中一个坐标轴上较为分散,跨度较大(也就是平行于该坐标轴),而在另一坐标轴上分布较为集中。也就是说,我们希望找到一个新的坐标轴,在该坐标轴中计算样本数据的协方差矩阵,对角线上的元素尽可能差别大,而其他元素尽可能为0,这就是我们理想中的新坐标轴。
三、PCA算法公式推导
假设有M个N维向量,我们希望其降到R维上,也就是找到R个互相正交的基,PCA的计算原理为:
$$
Y{R×M}=P{R×N}×X{N×M}
$$
Y就是我们期望得到的降维结果,而P就是我们期望得到的坐标系。为了更好的理解P,以二维数据为例,当N=2时,希望降维到一维:
$$
Y{1×M}=P{1×N}×X{2×M}
$$
这时P表示的是一个向量,以P向量所在的直线和与P的正交向量所在的直线为轴,就是我们期望得到的坐标系。这其中涉及到一些关于线性代数的理解,线性代数的一些运算其实可以转换成坐标系的变化,比如上式中两个矩阵相乘的意义:将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中。这里推荐3Blue1Brown的b站视频,十分生动地解释了线性代数的工作原理。
根据要求,符合我们期望的降维结果,其协方差矩阵除对角线元素外其余元素均为0,也就是一个对角矩阵,设Y的协方差矩阵为D,D与X的协方差矩阵C的关系为:
$$
D=\frac{1}{M}YY^T=\frac{1}{M}PXX^TP^T=PCP^T
$$
要理解上面这个表达式,需要明白一个规律:数据0中心化后, (X * X转置) /n 等于协方差矩阵(n为样本个数)。因此。我们需要将数据进行0中心化。
因此,我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,满足PCPT是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。、
如何找到这样一个矩阵P,并且P的前k行需要正交呢?这就需要运用特征向量和特征值。关于为什么一定要正交,正交可以使得不同维度的信息相关程度为0,这就使得协方差矩阵的除对角线上的元素外,其余元素的值为0。
根据协方差矩阵的定义,协方差矩阵一定是一个对称矩阵,而(实)对称矩阵具有如下性质:
1.实对称矩阵不同特征值对应的特征向量必然正交。
2.设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。
根据对称矩阵的性质,当特征数为N时,协方差矩阵是一个N×N维的实对称矩阵,该矩阵可以找到n个单位正交特征向量:
$$
E=(e_1,e_2,e_3,...,e_n)\\
E^TCE=
\begin{bmatrix}
\lambda_1\\
&\lambda_2\\
&&\ddots\\
&&&\lambda_n
\end{bmatrix}(\lambda为每个特征向量对应的特征值)
$$
那么我们需要的P=ET,P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。
总结一下PCA算法的具体流程:
1.将原始数据按列组成N行M列的矩阵X。
2.将X的每一行进行0均值化。
3.求出X的协方差矩阵C。
4.求出协方差矩阵C的特征值及对应的特征向量,C的特征值就是Y的每维元素的方差,也是D的对角线元素,从大到小沿对角线排列构成D。
5.将特征向量按对应特征值大小从上到下按行排列成矩阵,根据实际业务场景,取前R行组成矩阵P。
6.Y=PX即为降到R维后的目标矩阵。