PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量
主成分分析原理
线性变换
假设有两个向量,则这两个向量的内积为:
(
a
1
,
a
2
,
.
.
.
,
a
n
)
⋅
(
b
1
,
b
2
,
.
.
.
,
b
n
)
T
=
a
1
b
1
+
a
2
b
2
+
.
.
.
+
a
n
b
n
(a_{1},a_{2},...,a_{n})\cdot (b_{1},b_{2},...,b_{n})^{T}=a_{1}b_{1}+a_{2}b_{2}+...+a_{n}b_{n}
(a1,a2,...,an)⋅(b1,b2,...,bn)T=a1b1+a2b2+...+anbn
向量
A
A
A与
B
B
B的内积等于
A
A
A到
B
B
B的投影长度乘以
B
B
B的模,当
∣
B
∣
=
1
|B|=1
∣B∣=1时,内积表示
A
A
A向
B
B
B所在直线的投影标量(标量有正负);
在一直习惯的直角坐标系中,向量 ( 3 , 2 ) (3,2) (3,2) 隐式引入了定义:以 x x x 轴和 y y y 轴上正方向长度为 1 的向量为标准;向量 ( 3 , 2 ) (3,2) (3,2) 实际是说在 x x x 轴投影为 3 ,而 y y y 轴的投影为 2;即用 ( 3 , 2 ) (3,2) (3,2)分别与 ( 1 , 0 ) , ( 0 , 1 ) (1,0),(0,1) (1,0),(0,1)内积,得到投影的标量为3和2;这反映了:准确描述向量,首先要确定一组基,然后给出向量在基所在的各个直线上的投影值
通常要求基为正交基,比如两个基 q 1 , q 2 q_{1},q_{2} q1,q2,有 q 1 ⋅ q 2 T = 0 q_{1}\cdot q_{2}^{T}=0 q1⋅q2T=0
对于直角坐标系下的向量
(
3
,
2
)
(3,2)
(3,2),现在想把它变换到新的基
(
1
2
,
1
2
)
(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})
(21,21)与
(
−
1
2
,
1
2
)
(-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})
(−21,21),其投影为:

推广:如果有
m
m
m 个二维向量,只要将二维向量按列排成一个两行
m
m
m 列矩阵,然后用“基矩阵”乘以这个矩阵就可以得到了所有这些向量在新基下的值;我们可以把它写成通用的表示形式:

p
i
p_{i}
pi是行向量,表示第
i
i
i 个基,
a
j
a_{j}
aj是列向量,表示第
j
j
j 个数据;两个矩阵相乘的意义是将右边矩阵中的每一列向量
a
j
a_{j}
aj 变换到左边矩阵中以每一行向量为基所表示的空间中去。即一个矩阵可以表示一种线性变换
方差,协方差,协方差矩阵
上面的线性变换表达式反映了,选择不同的基可以对同样一组数据给出不同的表示,如果基的数量少于向量本身的维数,则可以达到降维的效果。如果有一组 N N N 维向量,现在要将其降到 K K K 维,应该如何选择 K K K 个基才能最大程度保留原有的信息?
一种直观的看法是:希望投影后的投影值尽可能分散,因为如果重叠就代表有样本消失的风险,比如一根轴上的数据,如果数据分散在轴上,则代表包含信息更多;当数据全部集中在轴上某点,代表看待数据的方向不正确,导致遗漏了大部分数据信息;
以上描述即:在旋转轴(基)时,想要最大化每个数据点到轴的投影;等价于最小化数据到轴的距离;对于直角坐标中的二维数据,即找到一根轴(一维基)可以实现最大信息地表达原数据,这个轴即主成分,主成分其实就是原始基的线性组合
方差可以描述数据的分散程度,一个变量的方差可以看做是每个元素与变量均值的差的平方和的均值,即:
V
a
r
(
a
)
=
1
m
∑
i
=
1
m
(
a
i
−
μ
)
2
Var(a)=\frac{1}{m}\sum_{i=1}^{m}(a_{i}-\mu)^{2}
Var(a)=m1i=1∑m(ai−μ)2
考虑到计算的化简,可以将数据进行平移,使得数据的均值为0,方差为:
V
a
r
(
a
)
=
1
m
∑
i
=
1
m
a
i
2
Var(a)=\frac{1}{m}\sum_{i=1}^{m}a_{i}^{2}
Var(a)=m1i=1∑mai2
因此,目前的一个任务是寻找一个低维的基,使数据变换到这个基上后,各维度对应的方差值尽可能大;
对于高维数据,协方差可以表示两个特征(两个变量)之间的相关性,为了让两个变量尽可能表示更多的原始信息,会希望它们之间不存在线性相关性,因为相关意味着两个变量不是完全独立,必然存在重复表示的信息。协方差公式为:
C
o
v
(
a
,
b
)
=
1
m
−
1
∑
i
=
1
m
(
a
i
−
μ
a
)
(
b
i
−
μ
b
)
Cov(a,b)=\frac{1}{m-1}\sum_{i=1}^{m}(a_{i}-\mu_{a})(b_{i}-\mu_{b})
Cov(a,b)=m−11i=1∑m(ai−μa)(bi−μb)
对于处理到均值为0后的数据,协方差计算为:
C
o
v
(
a
,
b
)
=
1
m
−
1
∑
i
=
1
m
a
i
b
i
≈
1
m
∑
i
=
1
m
a
i
b
i
Cov(a,b)=\frac{1}{m-1}\sum_{i=1}^{m}a_{i}b_{i}\approx \frac{1}{m}\sum_{i=1}^{m}a_{i}b_{i}
Cov(a,b)=m−11i=1∑maibi≈m1i=1∑maibi
当协方差为 0 时,表示两个变量完全独立。为了让协方差为 0,我们选择第二个基时只能在与第一个基正交的方向上进行选择,因此最终选择的两个方向一定是正交的;
至此,可得到目标:将一组 N N N 维向量降为 K K K 维,其目标是选择 K K K 个单位正交基,使得原始数据变换到这组基上后,相同特征之间方差越大越好,不同特征之间协方差越小越好;
协方差矩阵可以统一方差与协方差的表达,对于一组变量{
x
1
,
x
2
,
.
.
.
,
x
n
x_{1},x_{2},...,x_{n}
x1,x2,...,xn},协方差矩阵为:
C
=
(
c
i
j
)
n
×
n
,
c
i
j
=
C
o
v
(
x
i
,
x
j
)
C=(c_{ij})_{n\times n},c_{ij}=Cov(x_{i},x_{j})
C=(cij)n×n,cij=Cov(xi,xj)
主对角线上的元素即为变量的方差,其余元素为协方差;
假设有
m
m
m 个
n
n
n 维数据,将其排列成矩阵
X
n
,
m
X_{n,m}
Xn,m,设:
C
=
1
m
X
X
T
C=\frac{1}{m}XX^{T}
C=m1XXT
则
C
C
C 是一个协方差矩阵,协方差矩阵是一个实对称矩阵;
主成分分析
设原始数据矩阵
X
X
X 对应的协方差矩阵为
C
C
C,而
P
P
P 是一组基按行组成的矩阵,设
Y
=
P
X
Y=PX
Y=PX,则
Y
Y
Y 为
X
X
X 对
P
P
P 做基变换后的数据。设
Y
Y
Y 的协方差矩阵为
D
D
D,进行推理:

目标即为获得
P
P
P,使
D
D
D 的对角线元素尽可能大,非对角线元素尽可能小;矩阵特征值分解可以实现矩阵对角化(将非对角线元素化为0),对
C
C
C 进行特征值分解;
实现对角阵的特征值分解可以使用SVD的特殊形式EVD,SVD回顾 其他算法-SVD奇异值分解;
再根据特征值大小排序(特征值大小反映了特征向量的重要程度),从所有特征向量中选择前 K K K 行组成低维基 P P P
PCA计算过程与性质
假设有 m m m 个 n n n 维数据,PCA 的计算过程如下:
- 将原始数据排列成矩阵 X n , m X_{n,m} Xn,m
- 对 X X X的每一行进行零均值化,即减去这一行对应的均值
- 计算协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^{T} C=m1XXT
- EVD(SVD)分解协方差矩阵,即计算特征值与特征向量
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 K K K 行组成矩阵 P P P
- 用 Y = P X Y=PX Y=PX,得到降维后的数据 Y Y Y
PCA具有以下性质:
- 缓解维度灾:PCA 通过舍去一部分信息之后能使维数降低,可以缓解维度灾;
- 降噪:当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;
- 过拟合:PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能会加剧过拟合;
- 特征独立:PCA 不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立;
PCA与SVD
PCA与SVD是两种不同的定义,两种算法都广泛用于数据降维;
在Sklearn中的PCA实际上是SVD,原因在于:当样本维度很高时,协方差矩阵计算太慢,另外,PCA其实和SVD的压缩效果相差不大;
PCA白化和ZCA白化
数据白化预处理是一种常见的数据预处理方法,作用是去除样本数据的冗余信息,即降低特征之间的相关性;白化分为PCA白化和ZCA白化;
PCA白化建立在PCA的部分内容上,PCA白化不需要进行降维,假设有 m m m 个 n n n 维数据,则PCA白化过程为:
- 将原始数据排列成矩阵 X n , m X_{n,m} Xn,m
- 对 X X X的每一行进行零均值化,即减去这一行对应的均值
- 计算协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^{T} C=m1XXT
- EVD(SVD)分解协方差矩阵,即计算特征值与特征向量
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取所有行组成矩阵 U U U
- 用 X ′ = U X X'=UX X′=UX,得到去除特征相关性后的数据 X ′ X' X′
- 缩放数据 X ′ X' X′: X P C A w h i t e , i = X i ′ λ i X_{PCAwhite,i}=\frac{X'_{i}}{\sqrt{\lambda_{i}}} XPCAwhite,i=λiXi′,其中, i ∈ i\in i∈{ 1 , 2 , . . . , n 1,2,...,n 1,2,...,n}, λ i \lambda_{i} λi为协方差矩阵分解时对角阵的第 i i i个特征值
X
P
C
A
w
h
i
t
e
X_{PCAwhite}
XPCAwhite即PCA白化处理后的数据,ZCA白化是在PCA白化后,将结果变换回原来的坐标系,使白化后的数据更接近原始数据,同时确保去除特征相关性,ZCA白化如下:
X
Z
C
A
w
h
i
t
e
=
U
T
X
P
C
A
w
h
i
t
e
X_{ZCAwhite}=U^{T}X_{PCAwhite}
XZCAwhite=UTXPCAwhite
特征值分解: A = Q Σ Q T A=Q\Sigma Q^{T} A=QΣQT, Q Q Q为标准正交阵(满足 Q T Q = Q Q T = I Q^{T}Q=QQ^{T}=I QTQ=QQT=I), Σ \Sigma Σ为对角阵
214

被折叠的 条评论
为什么被折叠?



