数学概念

方差:用来衡量随机变量与其数学期望(均值)之间的偏离程度。统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数。
主成分分析(PCA)原理及使用详解 - 图1

协方差**:度量两个随机变量关系的统计量,协方差为0的两个随机变量是不相关的。

主成分分析(PCA)原理及使用详解 - 图2

协方差矩阵**:在统计学与概率论中,协方差矩阵的每个元素是各个向量元素之间的协方差。特殊的,矩阵对角线上的元素分别是向量的方差。

主成分分析(PCA)原理及使用详解 - 图3

PCA原理

主成分分析法(Principal Component Analysis)是一种基于变量协方差矩阵对数据进行压缩降维、去噪的有效方法,它借助正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分(PC),主成分是旧特征的线性组合。
PCA的本质就是找一些投影方向,使得数据在这些投影方向上的方差最大,而且这些投影方向是相互正交的。这其实就是找新的正交基的过程,计算原始数据在这些正交基上投影的方差,方差越大,就说明在对应正交基上包含了更多的信息量。如下图,第一个 PC 为 c1 所在的轴,第二个PC 为 c2 所在的轴,第三个 PC 为与平面正交的轴。我们仅保留一定数量的主成分来解释原始数据集的方差,而忽略其余部分。主成分分析(PCA)原理及使用详解 - 图4
PCA常用于高维数据的降维、数据噪音消除、图像压缩、特征脸等等。
image.png
图像压缩

PCA公式推导

1.假设主成分分析(PCA)原理及使用详解 - 图6主成分分析(PCA)原理及使用详解 - 图7 维随机变量,其均值为主成分分析(PCA)原理及使用详解 - 图8,协方差矩阵为主成分分析(PCA)原理及使用详解 - 图9

考虑由维随机变量到维随机变量的线性变换

主成分分析(PCA)原理及使用详解 - 图10
其中主成分分析(PCA)原理及使用详解 - 图11

如果该线性变换满足以下条件,则称之为总体主成分:

  1. 主成分分析(PCA)原理及使用详解 - 图12
  2. 主成分分析(PCA)原理及使用详解 - 图13

(3)变量主成分分析(PCA)原理及使用详解 - 图14主成分分析(PCA)原理及使用详解 - 图15的所有线性变换中方差最大的;主成分分析(PCA)原理及使用详解 - 图16是与主成分分析(PCA)原理及使用详解 - 图17不相关的的主成分分析(PCA)原理及使用详解 - 图18所有线性变换中方差最大的;一般地,主成分分析(PCA)原理及使用详解 - 图19是与主成分分析(PCA)原理及使用详解 - 图20都不相关的主成分分析(PCA)原理及使用详解 - 图21的所有线性变换中方差最大的;这时分别称主成分分析(PCA)原理及使用详解 - 图22主成分分析(PCA)原理及使用详解 - 图23的第一主成分、第二主成分、…、第主成分分析(PCA)原理及使用详解 - 图24主成分。
假设主成分分析(PCA)原理及使用详解 - 图25主成分分析(PCA)原理及使用详解 - 图26维随机变量,其协方差矩阵是主成分分析(PCA)原理及使用详解 - 图27主成分分析(PCA)原理及使用详解 - 图28的特征值分别是主成分分析(PCA)原理及使用详解 - 图29,特征值对应的单位特征向量分别是主成分分析(PCA)原理及使用详解 - 图30,则主成分分析(PCA)原理及使用详解 - 图31的第2主成分可以写作
主成分分析(PCA)原理及使用详解 - 图32

并且,主成分分析(PCA)原理及使用详解 - 图33的第主成分分析(PCA)原理及使用详解 - 图34主成分的方差是协方差矩阵主成分分析(PCA)原理及使用详解 - 图35的第个主成分分析(PCA)原理及使用详解 - 图36特征值,即
主成分分析(PCA)原理及使用详解 - 图37
3.主成分有以下性质:
主成分主成分分析(PCA)原理及使用详解 - 图38的协方差矩阵是对角矩阵
主成分分析(PCA)原理及使用详解 - 图39

主成分的方差之和等于随机变量的方差之和
主成分分析(PCA)原理及使用详解 - 图40

其中主成分分析(PCA)原理及使用详解 - 图41主成分分析(PCA)原理及使用详解 - 图42的方差,即协方差矩阵主成分分析(PCA)原理及使用详解 - 图43的对角线元素。

主成分主成分分析(PCA)原理及使用详解 - 图44与变量主成分分析(PCA)原理及使用详解 - 图45的相关系数主成分分析(PCA)原理及使用详解 - 图46称为因子负荷量(factor loading),它表示第主成分分析(PCA)原理及使用详解 - 图47个主成分主成分分析(PCA)原理及使用详解 - 图48与变量主成分分析(PCA)原理及使用详解 - 图49的相关关系,即主成分分析(PCA)原理及使用详解 - 图50主成分分析(PCA)原理及使用详解 - 图51的贡献程度。
主成分分析(PCA)原理及使用详解 - 图52

4.样本主成分分析就是基于样本协方差矩阵的主成分分析。
给定样本矩阵
主成分分析(PCA)原理及使用详解 - 图53

其中主成分分析(PCA)原理及使用详解 - 图54主成分分析(PCA)原理及使用详解 - 图55的第主成分分析(PCA)原理及使用详解 - 图56个独立观测样本,主成分分析(PCA)原理及使用详解 - 图57

主成分分析(PCA)原理及使用详解 - 图58的样本协方差矩阵
主成分分析(PCA)原理及使用详解 - 图59

给定样本数据矩阵主成分分析(PCA)原理及使用详解 - 图60,考虑向量主成分分析(PCA)原理及使用详解 - 图61主成分分析(PCA)原理及使用详解 - 图62的线性变换
主成分分析(PCA)原理及使用详解 - 图63
这里
主成分分析(PCA)原理及使用详解 - 图64

如果该线性变换满足以下条件,则称之为样本主成分。样本第一主成分主成分分析(PCA)原理及使用详解 - 图65是在主成分分析(PCA)原理及使用详解 - 图66条件下,使得主成分分析(PCA)原理及使用详解 - 图67的样本方差主成分分析(PCA)原理及使用详解 - 图68最大的的主成分分析(PCA)原理及使用详解 - 图69线性变换;

样本第二主成分是主成分分析(PCA)原理及使用详解 - 图70是在主成分分析(PCA)原理及使用详解 - 图71主成分分析(PCA)原理及使用详解 - 图72主成分分析(PCA)原理及使用详解 - 图73的样本协方差主成分分析(PCA)原理及使用详解 - 图74条件下,使得主成分分析(PCA)原理及使用详解 - 图75的样本方差主成分分析(PCA)原理及使用详解 - 图76最大的主成分分析(PCA)原理及使用详解 - 图77的线性变换;

一般地,样本第主成分分析(PCA)原理及使用详解 - 图78主成分主成分分析(PCA)原理及使用详解 - 图79是在主成分分析(PCA)原理及使用详解 - 图80主成分分析(PCA)原理及使用详解 - 图81主成分分析(PCA)原理及使用详解 - 图82的样本协方差主成分分析(PCA)原理及使用详解 - 图83条件下,使得主成分分析(PCA)原理及使用详解 - 图84的样本方差主成分分析(PCA)原理及使用详解 - 图85最大的主成分分析(PCA)原理及使用详解 - 图86的线性变换。

5.主成分分析方法主要有两种,可以通过相关矩阵的特征值分解或样本矩阵的奇异值分解进行。

(1)相关矩阵的特征值分解算法。针对主成分分析(PCA)原理及使用详解 - 图87样本矩阵主成分分析(PCA)原理及使用详解 - 图88,求样本相关矩阵
主成分分析(PCA)原理及使用详解 - 图89

再求样本相关矩阵的主成分分析(PCA)原理及使用详解 - 图90个特征值和对应的单位特征向量,构造正交矩阵
主成分分析(PCA)原理及使用详解 - 图91

主成分分析(PCA)原理及使用详解 - 图92的每一列对应一个主成分,得到主成分分析(PCA)原理及使用详解 - 图93样本主成分矩阵
主成分分析(PCA)原理及使用详解 - 图94

(2)矩阵主成分分析(PCA)原理及使用详解 - 图95的奇异值分解算法。针对主成分分析(PCA)原理及使用详解 - 图96样本矩阵
主成分分析(PCA)原理及使用详解 - 图97

对矩阵主成分分析(PCA)原理及使用详解 - 图98进行截断奇异值分解,保留主成分分析(PCA)原理及使用详解 - 图99个奇异值、奇异向量,得到

主成分分析(PCA)原理及使用详解 - 图100

主成分分析(PCA)原理及使用详解 - 图101的每一列对应一个主成分,得到主成分分析(PCA)原理及使用详解 - 图102样本主成分矩阵主成分分析(PCA)原理及使用详解 - 图103

主成分分析(PCA)原理及使用详解 - 图104

PCA算法流程

输入:n维样本集主成分分析(PCA)原理及使用详解 - 图105,要降维到的维数n’. 输出:降维后的样本集主成分分析(PCA)原理及使用详解 - 图106
1、 对所有的样本进行中心化:主成分分析(PCA)原理及使用详解 - 图107
2、 计算样本的协方差矩阵主成分分析(PCA)原理及使用详解 - 图108
3、 对矩阵主成分分析(PCA)原理及使用详解 - 图109进行特征值分解
4、 取出最大的n’个特征值对应的特征向量主成分分析(PCA)原理及使用详解 - 图110, 将所有的特征向量标准化后,组成特征向量矩阵主成分分析(PCA)原理及使用详解 - 图111
5、 对样本集中的每一个样本主成分分析(PCA)原理及使用详解 - 图112转化为新的样本主成分分析(PCA)原理及使用详解 - 图113
6、 得到输出样本集主成分分析(PCA)原理及使用详解 - 图114
有时候,我们不指定降维后的n’的值,而是换种方式,指定一个降维到的主成分比重阈值t。这个阈值t在(0,1]之间。假如我们的n个特征值为主成分分析(PCA)原理及使用详解 - 图115,则n’可以通过下式得到:
主成分分析(PCA)原理及使用详解 - 图116

scikit-learn中PCA的使用方法

调用

sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)主成分分析(PCA)原理及使用详解 - 图117
sklearn.decomposition.PCA 参数速查手册文字版
PCA 的使用简单的离谱,一般指定n_components即可,如果设置为整数,说明要保留的主成分数量。如果将其设置为小数,则说明降维后的数据能保留的信息。
上面提到主成分分析方法主要有两种,可以通过相关矩阵的特征值分解或样本矩阵的奇异值分解进行。scikit-learn库的PCA使用的就是奇异值分解方法,通过svd_solver参数指定:
randomized:适用于数据量大,数据维度多同时主成分数目比例又较低的 PCA 降维
full:传统意义上的 SVD,使用了 scipy 库对应的实现
arpack:直接使用 scipy 库的 sparse SVD 实现,和 randomized 的适用场景类似

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. from sklearn.decomposition import PCA
  5. from sklearn.datasets.samples_generator import make_blobs
  6. X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],
  7. cluster_std=[0.2, 0.1, 0.2, 0.2], random_state=9)
  8. fig = plt.figure()
  9. plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')
  10. plt.show()

主成分分析(PCA)原理及使用详解 - 图118

  1. # 降维到二维
  2. pca = PCA(n_components=2)
  3. pca.fit(X)
  4. # 输出特征值
  5. print(pca.explained_variance_)
  6. 输出特征向量
  7. print(pca.components_)
  8. # 降维后的数据
  9. X_new = pca.transform(X)
  10. print(X_new)
  11. fig = plt.figure()
  12. plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')
  13. plt.show()

这样我们就实现了三维到二维的转换,可以把结果可视化:
主成分分析(PCA)原理及使用详解 - 图119

PCA算法优缺点

PCA算法优点
1,仅仅需要以方差衡量信息量,不受数据集以外的因素影响
2,各主成分之间正交,可消除原始数据成分间的相互影响的因素
3,计算方法简单,主要运算时特征值分解,易于实现
4,它是无监督学习,完全无参数限制的。
PCA算法缺点
1,主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强
2,方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。