详解PCA
一、PCA简介
PCA(Principal component analysis,主成分分析)算法是一种基于多变量的降维技术,主要用于降维、可视化、去相关、分类、确定潜在因子、压缩和去噪音等方面。是特征工程中不可缺少的一部分,有利于我们构建更加适合模型的特征。
二、从二维的角度直观理解PCA
假设我们拥有样本矩阵 X X X, 从点图来看,数据似乎含有某种线性结构。我们沿着这条线性结构(方差最大的方向),可以构建出第一个主成分 v 1 v_1 v1. 同时,我们取和 v 1 v_1 v1相垂直的方向,可以获得第二个主成分 v 2 v_2 v2. 如下图所示:
如果我们采用这两个新方向作为空间的基,并在新的空间显示这些样本,我们发现,刚刚的一系列动作其实只是按照一定的角度旋转了原来的空间。
我们发现,现在这个数据还是二维的,我们并没有达到降维的目的(我们只是旋转了一下坐标轴)。那么,如果我们将这组数据都投影到纵轴等于0的直线上呢?显然,他就只有一个维度了。这不就达到降维的目的了吗?
现在,我们将这个坐标轴再旋转回去,将新的坐标表示在原坐标系中,我们会发现一个神奇的现象,数据似乎少了某个方向( v 2 v_2 v2)的信息,但是,好像绝大部分信息都被保留了。如果我们觉得丢失那一部分信息是我们可以接受的,那么,我们就只需要采取剩下这个方向的信息来进行之后的运算了。因此,也就实现了我们需要的降维。
三、如何计算主成分的方向
1、样本矩阵
假设我们有 n n n个 p p p维的样本(点) ( x 1 , … , x n ) (x_1,\dots,x_n) (x1,…,xn),我们有如下的样本矩阵(design matrix)
X = [ x 1 T x 2 T ⋮ x n T ] X=\left[\begin{array}{c}{x_{1}^{T}} \\ {x_{2}^{T}} \\ {\vdots} \\ {x_{n}^{T}}\end{array}\right] X=⎣⎢⎢⎢⎡x1Tx2T⋮xnT⎦⎥⎥⎥⎤
这个矩阵中,每一行就是一个样本,每一列是一个特征。
2、数据集预处理
PCA需要一个中心化过的样本矩阵用于后续的计算。因此每个样本都需要减去样本均值,即 x i − x ‾ x_{i}-\overline{x} xi−x, 其中 x ‾ = 1 n ∑ i = 1 n x i \overline{x}=\frac{1}{n} \sum_{i=1}^{n} x_{i} x=n1∑i=1nxi
此外,很多时候PCA还要求样本矩阵是规范化的,也就是说将每个特征的方差放缩为1.
3、离散程度度量
我们要找的那个主方向,其实就是数据离散程度最大的方向。样本方差是一个很好的离散程度度量指标。
s ⋆ 2 ≜ 1 n ∑ i = 1 n ( x i − x ‾ ) 2 s^{\star 2} \triangleq \frac{1}{n} \sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)^{2} s⋆2≜n1i=1∑n(xi−x)2