[机器学习] PCA理论

1. PCA综述

主成分析法(Principal Component Analysis, PCA)的思想就是降维

主成分析法可以:

  • 降低整个数据的维度
  • 提取数据集合中的主要成分,移除数据冗余,便于识别数据集中的一些规律(pattern)

用途有: 图像压缩,人脸识别。

2. 特征值(EigenValue)和特征向量(EigenVector)

定义:A x = λ x

意义

  • 特征向量顾名思义是用来表示一个矩阵的特征的。看上边的定义公式,一个矩阵A乘以一个向量x,等于一个数λ乘以向量 x,可以发现矩阵A和向量x有个对应关系,λ只是一个伸缩倍数而已。所以向量x可以用来表示A。

  • 特征值 λ 表示对应的特征向量 x 对与A总特征的贡献程度。也就是特征值越大的特征向量越能表示这个矩阵的特征

3. PCA计算步骤


1. 获取数据

数据集合X定义:(数据按行排列)

[机器学习] PCA理论插图

每行数据 Xi 可以是任意 1 * m 维:

[机器学习] PCA理论插图1

集合 X 是一个 n * m 的矩阵。

2. 计算矩阵X的平均值

[机器学习] PCA理论插图2 (1 * m 维)

记:

[机器学习] PCA理论插图3

3. 减去平均值

即:
[机器学习] PCA理论插图4

4. 计算矩阵X的协方差矩阵

简要的说,假设数据集有{ x, y, z } 三个维度,则协方差矩阵:

                       [机器学习] PCA理论插图5

矩阵X的样本按行排列,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的方差。将 X 按维度(列)划分:

[机器学习] PCA理论插图6

把协方差矩阵记为cov:

     [机器学习] PCA理论插图7     (m*m维)

其中:

[机器学习] PCA理论插图8

一个 n*m 的矩阵,如果元素按行排列(维度 = m),它的协方差矩阵是 m*m 的;如果元素按列排列(维度 = n),它的协方差矩阵是 n*n 的。

如何计算协方差矩阵请看:http://blog.csdn.net/kuang_liu/article/details/16369475

5. 计算矩阵cov的特征值和特征向量

因为协方差矩阵cov是对称矩阵,所以它的特征值和特征向量一定存在。

特征值记为eigenvalues = [ λ1, λ2 … λm ]

特征向量记为eigenvectors = [ v1, v2 … vm ]

关于如何利用 SVD 分解来简化求解协方差矩阵的特征值和特征向量请看:http://blog.csdn.net/kuang_liu/article/details/16659403

6. 选取主要成分

特征值越大,对应的特征向量越主要。

可以按特征值从大到小排序,这样对应的特征向量重要性依次递减。这里给出一种确定合适特征向量个数的方法:

[机器学习] PCA理论插图9

即:前 k 个特征值加起来占全部特征值和的95%(or greater!)。显然 k <= m。

将前 k 个特征向量提取出来,组成 FeatureVector,即:

[机器学习] PCA理论插图10 (k*m 维)

7. 投影(project)

给定一个任意的一个 1*m 维的向量,如何求投影到新的子空间里的向量 proj? 

公式:

              [机器学习] PCA理论插图11

FeatureVector 是 k*m 维的,转置变成 m*k 维, 前面两个向量差是 1*m 为的, (1*m) * (m*k),proj 变成 1*k 维。因为 k <= m,这样就把一个 m 维的向量降到了 k 维。

8. 反投影(backProject)

通过 proj 反过来计算原始数据 test

公式:

[机器学习] PCA理论插图12

这里:
[机器学习] PCA理论插图13

Reference:
  1. A tutorial on Principal Components Analysis [Lindsay I Smith]
  2. CS229 Lecture Notes – Part XI Principal Components Analysis [Andrew Ng]
  3. Andrew Ng 视频教程:http://v.163.com/movie/2008/1/M/E/M6SGF6VB4_M6SGKIEME.html

标签