[机器学习] 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定义:(数据按行排列)
每行数据 Xi 可以是任意 1 * m 维:
集合 X 是一个 n * m 的矩阵。
2. 计算矩阵X的平均值
(1 * m 维)
记:
3. 减去平均值
4. 计算矩阵X的协方差矩阵
简要的说,假设数据集有{ x, y, z } 三个维度,则协方差矩阵:
矩阵X的样本按行排列,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的方差。将 X 按维度(列)划分:
把协方差矩阵记为cov:
(m*m维)
其中:
一个 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. 选取主要成分
特征值越大,对应的特征向量越主要。
可以按特征值从大到小排序,这样对应的特征向量重要性依次递减。这里给出一种确定合适特征向量个数的方法:
即:前 k 个特征值加起来占全部特征值和的95%(or greater!)。显然 k <= m。
将前 k 个特征向量提取出来,组成 FeatureVector,即:
(k*m 维)
7. 投影(project)
给定一个任意的一个 1*m 维的向量,如何求投影到新的子空间里的向量 proj?
公式:
FeatureVector 是 k*m 维的,转置变成 m*k 维, 前面两个向量差是 1*m 为的, (1*m) * (m*k),proj 变成 1*k 维。因为 k <= m,这样就把一个 m 维的向量降到了 k 维。
8. 反投影(backProject)
通过 proj 反过来计算原始数据 test
公式:
- A tutorial on Principal Components Analysis [Lindsay I Smith]
- CS229 Lecture Notes – Part XI Principal Components Analysis [Andrew Ng]
- Andrew Ng 视频教程:http://v.163.com/movie/2008/1/M/E/M6SGF6VB4_M6SGKIEME.html