本博客主要用于本人重新复习知识点,所有参考列在文尾。如有错误,希望一起交流。
目录
PCA在做什么?
数据存在很多特征,但很多特征之间是有冗余的,所以我们可以通过更少的主成分去总结数据。PCA并不是在挑选特征,而是由旧特征构建新特征 (寻找最佳的线性组合)。
- 何为总结数据 ?尽可能体现数据的差异(最大方差,方差:原数据在投影线上的红点的散步,通过每个红点到数据中心的均方根距离来衡量红点的散布),尽可能好地重建原本特性的特征(最小误差,误差:原数据投影在投影线上的均方根距离)。这两者可以同时到达(勾股定理)。
协方差矩阵,对角线是方差,其他位置是两个维度的协方差,反应两个变量同向/反向变化+变化程度
基础知识
主成分分析 属于 无监督学习方法。
-
做法:利用正交变换把 由线性相关变量表示的观测数据 转换为 少数几个由线性无关变量表示的数据。通常主成分个数会比原始数据少,所以PCA属于 降维方法。
-
用处:主要用于发现数据中的基本结构,即数据变量之间的关系,是数据分析和其它机器学习方法的有力工具。
总体主成分分析:在数据总体上进行的主成分分析;
样本主成分分析:在有限样本上进行的主成分分析。
1. 总体主成分分析
PCA的基本思想
- 首先对给定数据进行规范化;
- 之后对数据进行正交变换,原来由线性相关变量表示的数据,通过正交变换变成由若干个线性无关的新变量表示的数据。新变量是可能的正交变换中变量的方差的和(信息保存)最大的,方差表示在新变量上的信息大小。
PCA的直观解释
-
规范化后数据分布在原点附近;
-
主成分分析对数据进行正交变换,等价于进行坐标系旋转变换,将数据投影到新坐标系的坐标轴上,坐标轴表示主成分,数据在每一轴上的坐标值的平方表示相应变量的方差,并且满足这个坐标系实在所有可能的新坐标系中,坐标轴上的方差的和最大的。
PCA旨在选取正交变换中方差最大的变量,作为第一主成分 ,也就是旋转变换中坐标值的平方和最大的轴。 max ( O A ′ 2 + O B ′ 2 + O C ′ 2 ) = min ( A A ′ 2 + B B ′ 2 + C C ′ 2 ) \max(OA'^2+OB'^2+OC'^2) = \min(AA'^2+BB'^2+CC'^2) max(OA′2+OB′2+OC′2)=min(AA′2+BB′2+CC′2)
总体主成分的定义
随机变量 x = ( x 1 , . . . , x m ) T x=(x_1,...,x_m)^T x=(x1,...,xm)T 到随机变量 y = ( y 1 , . . . , y m ) T y=(y_1,...,y_m)^T y=(y1,...,ym)T 的线性变换 y i = α T x = α 1 i x 1 + α 2 i x 2 + . . . + α m i x m y_i = \alpha^Tx=\alpha_{1i}x_1+\alpha_{2i}x_2+...+\alpha_{mi}x_m yi=αTx=α1ix1+α2ix2+...+αmixm. 给定一个这样的线性变换,如果它满足:
- 系数向量 α i T \alpha_i^T αiT 是单位向量 == α i T α i = 1 , i = 1 , . . . , m \alpha_i^T \alpha_i =1, i=1,...,m αiTαi=1,i=1,...,m.
- y i y_i yi 与 y j y_j yj 互不相关 == c o v ( y i , y j ) = 0 ( i ≠ j ) cov(y_i,y_j) = 0 \ (i \not= j) cov(yi,yj)=0 (i=j).
-
y
1
y_1
y1 是
x
x
x 所有线性变换中方差最大的;
y 2 y_2 y2 是与 y 1 y_1 y1 不相关的x的所有线性变换中方差最大的;
y 2 y_2 y2 是与 y 1 , y 2 , . . . , y i − 1 y_1,y_2,...,y_{i-1} y1,y2,...,yi−1 都不相关的 x x x 的所有线性变换中方差最大的。
这时候分别称 y 1 , y 2 , . . , y m y_1,y_2,..,y_m y1,y2,..,ym 为 x x x 的第一主成分、第二主成分、… 、第 m m m 主成分。
总体主成分主要性质
定理:总体主成分与协方差矩阵的特征值和特征向量的关系:
推论:
性质:
主成分的个数
两个定理为选择 k k k 个主成分提供了理论依据。
具体选择 k k k 的方法 ==> 利用方差贡献率 (通常是取k使得累计方差贡献率达到规定的百分比之上)
- 第 k k k 主成分 y k y_k yk 的方差贡献率: y k y_k yk 的方差与所有方差之和 的比: η = λ k ∑ i = 1 m λ i \eta = \displaystyle \frac{\lambda_k}{\sum_{i=1}^m \lambda_i} η=∑i=1mλiλk;
-
k
k
k 个主成分
y
1
,
.
.
.
,
y
k
y_1,...,y_k
y1,...,yk 的累计方差贡献率:
∑
i
=
1
k
η
i
=
∑
i
=
1
k
λ
i
∑
i
=
1
m
λ
i
\sum_{i=1}^k \eta_i = \displaystyle \frac{\sum_{i=1}^k \lambda_i}{\sum_{i=1}^m \lambda_i}
∑i=1kηi=∑i=1mλi∑i=1kλi
累计方差贡献率反映了主成分保留信息的比例。 - k个主成分
y
1
,
.
.
.
,
y
k
y_1,...,y_k
y1,...,yk 对原有变量
x
i
x_i
xi 的贡献率:
v
i
=
ρ
2
(
x
i
,
(
y
1
,
.
.
.
,
y
k
)
)
=
∑
j
=
1
k
ρ
2
(
x
i
,
y
j
)
=
∑
j
=
1
k
λ
j
α
i
j
2
σ
i
i
v_i = \rho^2(x_i, (y_1,...,y_k)) = \sum_{j=1}^k \rho^2(x_i, y_j) = \sum_{j=1}^k \frac{\lambda_j \alpha_{ij}^2}{\sigma_{ii}}
vi=ρ2(xi,(y1,...,yk))=∑j=1kρ2(xi,yj)=∑j=1kσiiλjαij2
反映了对某个原有变量 x i x_i xi 保留信息的比例。
规范化变量的总体主成分
目的:为了消除量纲对主成分产生的不合理影响,需要对各个随机变量实施规范化,使其均值为 0,方差为 1。
公式:设 x = ( x 1 , . . . , x m ) T x=(x_1,...,x_m)^T x=(x1,...,xm)T 为 m 维随机变量, x i x_i xi 为第i个随机变量,则其规范化随机变量为 x i ∗ = x i − E ( x i ) v a r ( x i ) , i = 1 , . . . , m x_i^* = \displaystyle \frac{x_i-\mathbb{E}(x_i)}{\sqrt{var(x_i)}}, i = 1,...,m xi∗=var(xi)xi−E(xi),i=1,...,m.
注意:规范化随机变量的协方差矩阵就是相关矩阵 R R R,所以主成分分析通常在规范化随机变量的协方差矩阵 (相关矩阵) 上进行。
规范化变量的总体主成分性质:
- 规范化变量主成分的协方差矩阵 Λ ∗ = d i a g ( λ 1 ∗ , λ 2 ∗ , . . . , λ m ∗ ) , λ 1 ∗ ≥ λ 2 ∗ ≥ . . . ≥ λ m ∗ ≥ 0 \Lambda^* = diag(\lambda_1^*,\lambda_2^*,...,\lambda_m^*), \lambda_1^* \ge \lambda_2^* \ge ... \ge \lambda_m^* \ge 0 Λ∗=diag(λ1∗,λ2∗,...,λm∗),λ1∗≥λ2∗≥...≥λm∗≥0 为 R R R 的特征值;
- 协方差矩阵的特征值之和为 m m m;
- 规范化随机变量 x i ∗ x_i^* xi∗ 与主成分 y k ∗ y_k^* yk∗ 的相关系数(因子负荷量) 为 ρ ( y k ∗ , x i ∗ ) = λ k ∗ e i k ∗ , k , i = 1 , 2 , . . . , m \rho(y_k^*,x_i^*) = \sqrt{\lambda_k^*}e_{ik}^*, \ \ k,i =1,2,...,m ρ(yk∗,xi∗)=λk∗eik∗, k,i=1,2,...,m,其中 e k ∗ = ( e 1 k ∗ , e 2 k ∗ , . . . , e m k ∗ ) T e_k^*=(e_{1k}^*,e_{2k}^*,...,e_{mk}^*)^T ek∗=(e1k∗,e2k∗,...,emk∗)T 为 R R R 对应于特征值 λ k ∗ \lambda_k^* λk∗ 的单位特征向量。
- x i ∗ x_i^* xi∗ 与主成分 y k ∗ y_k^* yk∗ 的相关系数的平方和为1: ∑ i = 1 m ρ 2 ( y k ∗ , x i ∗ ) = ∑ i = 1 m λ k ∗ e i k ∗ 2 = 1 \sum_{i=1}^m \rho^2(y_k^*,x_{i}^*) = \sum_{i=1}^m \lambda_k^*e_{ik}^{*2} =1 ∑i=1mρ2(yk∗,xi∗)=∑i=1mλk∗eik∗2=1
2. 样本主成分分析
观测数据以及线性变换后的相关信息
样本主成分分析的定义与性质
传统的主成分分析 进行步骤
可以将原变量和主成分的因子负荷量在平面坐标中表示:
常用的主成分分析 进行步骤
3. 优缺点
缺点:
- 它可以很好的解除线性相关,但是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关。
- PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。
PCA是一种无参数技术,也就是说面对同样的数据,如果不考虑清洗,谁来做结果都一样,没有主观参数的介入。所以PCA便于通用实现,但是本身无法个性化的优化。
应用
- 用PCA进行降维
降维后可以接一个逻辑回归,实现分类任务(人脸识别:参考) - 用PCA做数据可视化
将高维数据降低到2维或是3维,放到坐标系中自然就可视了。 - 用PCA做图像压缩
Python 实现
Sklearn库
补充:sklearn 数据预处理中 fit(), transform() 与 fit_transform() 的区别
fit()
:简单来说,就是求得训练集X的均值啊,方差啊,最大值啊,最小值啊这些训练集X固有的属性。可以理解为一个训练过程。transform()
:在Fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。fit_transform()
:fit_transform
是fit
和transform
的组合,既包括了训练又包含了转换。
transform()
和fit_transform()
功能:对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等).
fit_transform(trainData)
对部分数据先拟合 fit,找到该部分数据的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该 trainData 进行转换 transform,从而实现数据的标准化、归一化等等。- 根据对之前部分 trainData 进行 fit 的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换
transform(testData)
,从而保证 train、test 处理方式相同。
所以,一般都是这么用:
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)
注意:
- 必须先用
fit_transform(trainData)
,之后再transform(testData)
- 如果直接
transform(testData)
,程序会报错- 如果
fit_transfrom(trainData)
后,使用fit_transform(testData)
,虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)
资源
人脸识别常用数据集大全:https://zhuanlan.zhihu.com/p/31378836
参考
- 李航,统计机器学习方法(第二版),2019:297 - 320.
- 通俗理解:https://www.zhihu.com/question/41120789/answer/474222214
- 应用:https://blog.csdn.net/ctyqy2015301200079/article/details/85325125
- 优缺点:https://blog.csdn.net/ws_developer/article/details/81634059
- sklearn:https://zhuanlan.zhihu.com/p/42297868