PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。
维数灾难
维数灾难(Curse of Dimensionality):通常是指在涉及到向量的计算的问题中,随着维数的增加,计算量呈指数倍增长的一种现象。
在机器学习中,随着数据集维数的增加,数据的计算量将呈几何倍数增加,同时样本间的距离会远远增大,这将导致样本数据失去其意义。
为了减少计算量、增加准确度,我们有必要按照一定的规则去除一些维度 (特征),这便是降维算法。PCA 算法就是机器学习中的典型降维算法。
PCA
基变换
二维坐标系
考虑二维坐标 (3, 2),它有什么数学意义?
如果仔细思考,二维坐标的两个值实际上是在 x 轴和 y 轴上的投影。
这里的 x 轴单位方向 (1,0) 和 y 轴单位方向 (0,1) 就是所谓的一组基。
基变换矩阵
如果把上面的例子通过矩阵表示:
比如一组基为:
是一组行向量,表示一个基 是一组列向量,表示一个坐标 (样本)
最大可分性
最大可分性是 PCA 算法的原则,即:
- 样本尽可能分散
- 样本之间尽可能不相关
为此,可以考虑两个数学概念:
- 方差,衡量数据的偏离程度。为使样本分散,方差应尽可能大。
- 协方差,衡量两组数据的相关性。为使样本之间不相关,协方差应尽可能小。
去中心化
为了简化计算,可以事先将均值作为坐标轴的中心。这样一来,均值都为
0,公式可简化为:
协方差矩阵
如果有 a 和 b 两组数据,排列成矩阵:
这样两个变量的方差和协方差就被统一在矩阵里。
如果有 n 组数据,同样可以得到一个 n 维的协方差矩阵,这个矩阵可以反映任意一组数据的分散程度和任意两组数据的相关性。
矩阵对角化
考虑最大可分性,我们的目标是找到一组基,使得原矩阵经过基变换后的协方差 (非对角线元素) = 0,而方差 (对角线上的元素) 从大到小排列 (左上最大),因为基变换时如果要降维,越下方的基越不会被考虑到,其权重应尽量小。
设原始数据矩阵 X 对应协方差矩阵为
设 Y = PX,其中 P 是一组基组成的矩阵,则 Y 是 X 在 P 上做基变换得到的矩阵。
设 Y 的协方差矩阵为
要如何得到 P 呢?
可以推导:
原问题就相当于寻找一个矩阵 P,满足
注意到协方差矩阵是实对称对称,而实对称矩阵具有优秀的性质:
- 实对称矩阵不同特征值对应的特征向量必然正交
- 实对称矩阵一定可以相似对角化
- 若实对称矩阵具有 k 重特征值
,必有 k 个线性无关的特征向量
因此,一个
若组成矩阵
根据特征值从大到小,将特征向量从上到下排列。则
PCA 的步骤
- 将原始数据按列组成
的矩阵 X - 对 X 去中心化,即去除均值
- 求出协方差矩阵
- 求出协方差矩阵的特征值和对应的特征向量
- 将特征向量按对应特征值大小从上到下按行排成矩阵 E
- 取 E 的前 k 行作为矩阵 P
- 进行基变换
实现降维
举例
2 | 0 | -1.4 |
2.2 | 0.2 | -1.5 |
2.4 | 0.1 | -1 |
1.9 | 0 | -1.2 |
首先求出三个维度 (特征) 的均值:
去中心化处理:
-0.125 | -0.075 | -0.125 |
0.075 | 0.125 | -0.225 |
0.275 | 0.025 | 0.275 |
-0.225 | -0.075 | 0.075 |
此时各维度的均值被化为 0.
得到矩阵:
计算协方差矩阵:
1 | C = |
求出协方差矩阵的特征值和对应的特征向量:
1 | V = |
特征值从大到小:
取前 k 个特征向量,假设
