12.主成分分析(PCA)
PCA主要是去除相关联特征中的噪声,从而使得关联特征数量转化为同一平面(直线),从而达到降纬的目的。也就是寻找数据变更主轴。
应用:
- 可视化
- 压缩数据
- 提高机器学习速度
- 减少过拟合
- 异常检测
- 距离计算
例如我们有一个关于飞行员水平数据集,其中一个特征代表飞行员对飞行的热情,另一个特征代表飞行员飞行水平。这两个特征很可能是线性相关的,但是由于数据中存在噪声的影响导致这两个特征的关联性看起来不强。如下图所示。
在
u
1
u_1
u1方向代表数据的主方向,在
u
2
u_2
u2方向代表数据的噪声。我们需要的就是将数据映射到主方向
u
1
u_1
u1上,这样便将二维数据转化为一维上的数据,从而达到了降维的目的。
在运行PCA之前我们还需要对数据进行一些处理:如下所示:
- 设 μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac 1m\sum_{i=1}^m x^{(i)} μ=m1∑i=1mx(i)
- 将每个 x ( i ) x^{(i)} x(i) 替换成 x ( i ) − μ x^{(i)} - \mu x(i)−μ
- 设 σ j 2 = 1 m ∑ i ( x j ( i ) ) 2 \sigma_j^2=\frac 1m\sum_{i} (x_j^{(i)})^2 σj2=m1∑i(xj(i))2
- 将每个 x j ( i ) x_j^{(i)} xj(i) 替换成 x j ( i ) / σ j x_j^{(i)}/\sigma_j xj(i)/σj.
第 ( 1 − 2 ) (1-2) (1−2)步把数据的平均值清零,然后可以省略掉所有有零均值的数据(例如,对应语音或者其他声学信号的时间序列)。第 ( 3 − 4 ) (3-4) (3−4)步将每个坐标缩放,使之具有单位方差,这确保了不同的属性都在同样的“尺度”上来进行处理。例如,如果 x 1 x_1 x1 是汽车的最大速度(以 mph 为单位,精确到十位),然后 x 2 x_2 x2 是汽车的座位数量(取值一般在 2-4),这样这个重新正则化就把不同的属性进行了缩放,然后这些不同属性就更具有对比性。如果我们事先已经知道不同的属性在同一尺度上,就可以省略第 ( 3 − 4 ) (3-4) (3−4)步。例如,如果每个数据点表示灰度图像中的每个数据点,而每个 x j ( i ) x_j^{(i)} xj(i) 就从 { 0 , 1 , . . . , 255 } \{0, 1, . . . , 255\} {0,1,...,255} 中取值,对应的也就是在图像 i i i 中像素 j j j 位置的灰度值。
下面我们开始寻找方向 u 1 u_1 u1,我们如何去寻找呢?在信息论中,信号和噪声的方差是不同的,噪声的方差偏小,信号之间的方差偏大。所以我们应该尽可能的去保证数据在投影之后的方差尽可能的大,从而保证了信息的完整性。我们知道:
假设样本为向量
x
x
x,方向单位向量为
u
u
u,两向量之间的夹角为
θ
\theta
θ,所以将
x
x
x投影到
u
u
u上的向量
u
′
u'
u′为
u
⋅
c
o
s
θ
u\cdot cos\theta
u⋅cosθ,则
u
′
u'
u′的模长为
∣
u
′
∣
=
x
⋅
u
|u'|=x\cdot u
∣u′∣=x⋅u.由于之前样本数据都减去了均值,所以投影后的均值依旧为0。于是我们可以得出方差为:
1
m
∑
i
=
1
m
(
x
(
i
)
T
u
)
2
=
1
m
∑
i
=
1
m
u
T
x
(
i
)
x
(
i
)
T
u
=
u
T
(
1
m
∑
i
=
1
m
x
(
i
)
x
(
i
)
T
)
u
\begin{aligned} \frac 1m\sum_{i=1}^m (x^{(i)T}u)^2 &= \frac 1m\sum_{i=1}^m u^Tx^{(i)}x^{(i)T}u \\ &= u^T(\frac 1m\sum_{i=1}^m x^{(i)}x^{(i)T})u \end{aligned}
m1i=1∑m(x(i)Tu)2=m1i=1∑muTx(i)x(i)Tu=uT(m1i=1∑mx(i)x(i)T)u
也就是我们要将以上的式子最大化。需要注意的是:需要满足约束
∣
∣
u
∣
∣
2
=
1
||u||_2 = 1
∣∣u∣∣2=1等价于
u
T
u
=
1
u^T u = 1
uTu=1.所以这是一个规划问题,我们可以用拉个朗日乘数法求解这个最大值。
同时如果我们将上式子写作如下形式: u T Σ u = λ u^T \Sigma u=\lambda uTΣu=λ,因为 u T u = 1 u^T u = 1 uTu=1 ,所以转化为 Σ u = λ u \Sigma u = \lambda u Σu=λu(两边同乘 u T u^T uT).也就是说向量 u u u 是 Σ \Sigma Σ 的特征向量,特征值为 λ \lambda λ。
如果假设求出的特征向量(单位向量、正交基)是
u
1
,
.
.
.
,
u
k
u_1, . . ., u_k
u1,...,uk,则
x
(
i
)
x^{(i)}
x(i)可映射为:
y
(
i
)
=
[
u
1
T
x
(
i
)
u
2
T
x
(
i
)
⋮
u
k
T
x
(
i
)
]
∈
R
k
y^{(i)}=\begin{bmatrix} u_1^T x^{(i)}\\ u_2^T x^{(i)}\\ \vdots\\ u_k^T x^{(i)} \end{bmatrix} \in R^k
y(i)=⎣⎢⎢⎢⎡u1Tx(i)u2Tx(i)⋮ukTx(i)⎦⎥⎥⎥⎤∈Rk
因此,
x
(
i
)
∈
R
n
x^{(i)} \in R^n
x(i)∈Rn,向量
y
(
i
)
y^{(i)}
y(i)就是对
x
(
i
)
x^{(i)}
x(i) 的近似表示。
SVD(奇异值分解)
通过上面的说明我们可以知道, Σ = 1 m ∑ i = 1 m x ( i ) x ( i ) T \Sigma=\frac 1m\sum_{i=1}^m x^{(i)}x^{(i)T} Σ=m1∑i=1mx(i)x(i)T,所以我们不妨改写为:
首先令
X
X
X:
X
=
[
—
x
(
1
)
T
—
—
x
(
2
)
T
—
⋮
—
x
(
m
)
T
—
]
X=\begin{bmatrix} —&{x^{(1)}}^T&—\\ —&{x^{(2)}}^T&—\\ &\vdots&\\ —&{x^{(m)}}^T&—\\ \end{bmatrix}
X=⎣⎢⎢⎢⎢⎡———x(1)Tx(2)T⋮x(m)T———⎦⎥⎥⎥⎥⎤
则
Σ
\Sigma
Σ:
Σ
=
[
∣
∣
∣
x
(
1
)
x
(
2
)
⋯
x
(
m
)
∣
∣
∣
]
[
—
x
(
1
)
T
—
—
x
(
2
)
T
—
⋮
—
x
(
m
)
T
—
]
=
X
T
X
\Sigma=\begin{bmatrix} |&|&&|\\ x^{(1)}&x^{(2)}&\cdots&x^{(m)}\\ |&|&&| \end{bmatrix} \begin{bmatrix} —&{x^{(1)}}^T&—\\ —&{x^{(2)}}^T&—\\ &\vdots&\\ —&{x^{(m)}}^T&—\\ \end{bmatrix}=X^TX
Σ=⎣⎡∣x(1)∣∣x(2)∣⋯∣x(m)∣⎦⎤⎣⎢⎢⎢⎢⎡———x(1)Tx(2)T⋮x(m)T———⎦⎥⎥⎥⎥⎤=XTX
SVD
假设有矩阵
X
∈
R
m
×
n
X \in \mathbb R^{m\times n}
X∈Rm×n(
m
m
m是样本数,
n
n
n是特征数),则矩阵可以写成
X
=
U
Σ
V
T
X=UΣV^T
X=UΣVT
其中
U
∈
R
m
×
m
,
Σ
∈
R
m
×
n
,
V
∈
R
m
×
n
U \in \mathbb R^{m\times m}, Σ\in \mathbb R^{m\times n} ,V\in \mathbb R^{m\times n}
U∈Rm×m,Σ∈Rm×n,V∈Rm×n(注意这里的
Σ
Σ
Σ和上面的不相关)。U和V都是正交基方阵,即满足
U
T
U
=
I
,
V
T
V
=
I
U^TU=I,V^TV=I
UTU=I,VTV=I,
Σ
Σ
Σ是除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值。
我们可以发现:
X
T
X
=
V
Σ
T
U
T
U
Σ
V
T
=
V
Σ
2
V
T
X^TX=VΣ^TU^TUΣV^T=VΣ^2V^T
XTX=VΣTUTUΣVT=VΣ2VT
可以看出
X
T
X
X^TX
XTX的特征向量组成矩阵
V
V
V,同理
X
X
T
XX^T
XXT的特征向量组成了矩阵
U
U
U。
一般我们将右侧 V V V的特征向量称为右奇异向量,左侧 U U U的特征向量称为左奇异向量。
我们可以得到:
(
A
T
A
)
v
i
=
λ
i
v
i
(
A
A
T
)
u
i
=
λ
i
u
i
(A^TA)v_i=λ_iv_i\\ (AA^T)u_i=λ_iu_i
(ATA)vi=λivi(AAT)ui=λiui
所以可以推出:
A
=
U
Σ
V
T
A
V
=
U
Σ
V
T
V
A
V
=
U
Σ
A
v
i
=
σ
i
u
i
\begin{aligned} A&=UΣV^T\\ AV&=UΣV^TV\\ AV&=UΣ\\ Av_i&=σ_iu_i \end{aligned}
AAVAVAvi=UΣVT=UΣVTV=UΣ=σiui
得到
σ
i
u
i
=
A
v
i
σ_iu_i=Av_i
σiui=Avi之后便可求出
σ
i
σ_i
σi(等式的左右都是成比例的列向量)
由于
X
T
X
=
V
Σ
2
V
T
X^TX=VΣ^2V^T
XTX=VΣ2VT
所以可以知道
σ
i
=
λ
i
σ_i=\sqrt{λ_i}
σi=λi
所以我们可以通过求奇异值的方法来求PCA中矩阵的特征,降低计算量。
小结:
概率估计算法 | 非概率算法 | |
---|---|---|
子空间 | 因子分析法 | PCA降维 |
数据在团块中 | 混合高斯 | K-means |