点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝
备战秋招面试 微信搜索公众号【TechGuide】关注更多新鲜好文和互联网大厂的笔经面经。
作者@TechGuide
当你的才华还撑不起你的野心时,你应该静下心去学习 。 |
---|
一、前言
毫不夸张地说,主成分分析(Principal Component Analysis)面前,在座的各位都是小朋友,PCA算法距离1901年提出已经过了一百多年,纵然世纪更迭,但是许多人对PCA算法在人脸识别领域中的应用仍然逃不过真香定律,它仍然是目前最简单的以特征量分析多维度统计分布的方法,没有之一,可以说是算法必掌握之利器。
二、为什么要有主成分分析
和这个系列名对应,主成分分析是特征提取的一个常用算法。这时肯定有人对特征提取和特征选择的区别产生疑问,简单来说,特征提取是从N个特征中,通过构造M个函数的方式,获得M个特征,这里每个特征都是包含了前N个特征得出的。而特征选择就是“单纯的”从样本的N个特征中选出前M个最matter(比如在人脸识别中使得识别率最高的)的特征。这两种情况下,M都是小于N的,直观来讲,比如我从样本集中拿出一个神奇宝贝
X
i
X_i
Xi,他可能包含有N个特征,比如
X
i
1
X_{i1}
Xi1是它的类系,
X
i
2
X_{i2}
Xi2使它的攻击力,
X
i
3
X_{i3}
Xi3使它的防御力,等等,那么由此得来的样本
X
i
X_{i}
Xi的特征空间可以表示为
X
i
=
[
X
i
1
X
i
2
X
i
3
.
.
.
X
i
N
]
X_i = \left[ \begin{matrix} X_{i1}\\ X_{i2} \\ X_{i3} \\ ... \\ X_{iN} \\ \end{matrix} \right]
Xi=⎣⎢⎢⎢⎢⎡Xi1Xi2Xi3...XiN⎦⎥⎥⎥⎥⎤,而这样的N个维度有时对于实际问题来说可能太多了,需要减少样本的维度,而这时候,主成分分析就要来秀一波了,它是降低数据维度的一把好手,比如这个问题,他就可以提取出M个特征使得神奇宝贝的胜率达到最高。
但是要注意,这里重新得到的
X
i
1
X_{i1}
Xi1,
X
i
2
X_{i2}
Xi2,等等已经和之前的不一样了,事实上,这里的每个新特征
(
X
i
m
,
m
∈
1
到
M
)
(X_{im} ,m \in 1到M)
(Xim,m∈1到M)是关于之前N个特征的综合考虑,可以表示为,
X
i
=
[
f
1
(
X
i
1
,
.
.
.
,
X
i
N
)
f
2
(
X
i
1
,
.
.
.
,
X
i
N
)
f
3
(
X
i
1
,
.
.
.
,
X
i
N
)
.
.
.
f
M
(
X
i
1
,
.
.
.
,
X
i
N
)
]
,
M
<
N
X_i = \left[ \begin{matrix} f_{1}(X_{i1},...,X_{iN})\\ f_{2}(X_{i1},...,X_{iN}) \\ f_{3}(X_{i1},...,X_{iN}) \\ ... \\ f_{M}(X_{i1},...,X_{iN}) \\ \end{matrix} \right],\,M<N
Xi=⎣⎢⎢⎢⎢⎡f1(Xi1,...,XiN)f2(Xi1,...,XiN)f3(Xi1,...,XiN)...fM(Xi1,...,XiN)⎦⎥⎥⎥⎥⎤,M<N
三、二维主成分分析
OK,我们由浅入深,先来考虑一下二维情况时的主成分分析,也就是N=2,M=1的情况,这样每个样本点都分布在一个二维平面上,我们可以用一个二维坐标系表示。
优化问题得出
好,那我们要拿主成分分析来干嘛呢?我们想要作特征提取,也就是把
X
1
,
X
2
X_1,X_2
X1,X2这两个特征“融合”成一个特征用来作后续胜率的分析。试想一下,如果我们要考虑皮卡丘和杰尼龟(假设只有攻击力和防御力这两个特征)战斗的胜率,
X
1
X_1
X1表示攻击力,
X
2
X_2
X2表示防御力,那么我们希望找一个特征(也就是找一个轴),把原本在二维坐标系上的点还能投影到这个坐标轴上的对应位置,以使得所有样本分布尽可能不变。
我们可以画出这样的坐标系,皮卡丘和杰尼龟分别用P和J点代替,皮卡丘的攻击力较高,杰尼龟的防御力较高,那怎么判断谁获胜的可能性比较大呢?很显然,对这两个特征做个综合,具体怎么说呢?就是给
X
1
,
X
2
X_1,X_2
X1,X2分别一个权重,然后得到一个新的特征能力值综合考虑了他们的攻击力和防御力,这样把P1,J1这两个二维坐标投影到一维上,然后比较P2,J2,就能估计胜率啦!
很好,照着这个思路,也就是我们需要构造一个函数
Y
=
A
X
+
b
Y = AX + b
Y=AX+b,也就是找出A和b使得所有的样本点在这条线上的投影尽可能分散,以便我们借助我们新得的这个特征Y尽可能区分开他们,由此我们得出,
我
们
要
找
到
使
得
Y
值
方
差
最
大
的
方
向
{\color{red} 我们要找到使得Y值方差最大的方向}
我们要找到使得Y值方差最大的方向
并
将
样
本
点
在
该
方
向
上
投
影
!
!
!
{\color{red} 并将样本点在该方向上投影!!!}
并将样本点在该方向上投影!!!也就是上图中的F1方向。
假设现在我们有P个样本点, { X i } , i = 1 到 p \left\{X_i\right\},i= 1到p {Xi},i=1到p,这样,可以把 Y = A X + b Y = AX + b Y=AX+b改造为 Y = A ( X − X ˉ ) Y = A(X - \bar X) Y=A(X−Xˉ),其中 X ˉ = 1 p ∑ i = 1 p X p \bar X = \frac{1}{p}\sum_{i=1}^pX_p Xˉ=p1∑i=1pXp,当我们想要把N维向量降为M维时,很显然 ( X − X ˉ ) (X - \bar X) (X−Xˉ)应该是Mx1的矩阵,而A应该是NxM的矩阵,假设 A = [ a 1 a 2 a 3 . . . a M ] A = \left[ \begin{matrix} a1\\ a2 \\ a3 \\ ... \\ a_M \\ \end{matrix} \right] A=⎣⎢⎢⎢⎢⎡a1a2a3...aM⎦⎥⎥⎥⎥⎤,其中a向量是Mx1的矩阵,这里的a1等等实际上就表示M个方向,在这M个方向上投影就得到M个值。(Tips:搞清楚各个向量的维度对理解后续推导至关重要,请停下来思考一下。),所以Y向量为, Y = [ Y i 1 Y i 2 Y i 3 . . . Y i M ] = [ a 1 ( X i − X ˉ ) a 2 ( X i − X ˉ ) a 3 ( X i − X ˉ ) . . . a M ( X i − X ˉ ) ] Y = \left[ \begin{matrix} Y_{i1}\\ Y_{i2} \\ Y_{i3} \\ ... \\ Y_{iM} \\ \end{matrix} \right] =\left[ \begin{matrix} a1(X_i-\bar X)\\ a2(X_i-\bar X) \\ a3(X_i-\bar X) \\ ... \\ a_M(X_i-\bar X) \\ \end{matrix} \right] Y=⎣⎢⎢⎢⎢⎡Yi1Yi2Yi3...YiM⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡a1(Xi−Xˉ)a2(Xi−Xˉ)a3(Xi−Xˉ)...aM(Xi−Xˉ)⎦⎥⎥⎥⎥⎤
Great!通过前面这样的一通分析,我们终于有了目标,有了目标就可以尝试得出优化问题的目标函数和约束,现在,我们只考虑有p个样本的二维情况,所以N=2,M=1,这样很简单,Y就是一个值,我们要最大化方差,也就是最大化
∑
i
=
1
p
(
y
i
1
−
y
ˉ
i
1
)
2
\sum_{i=1}^p(y_{i1}-\bar y_{i1})^2
∑i=1p(yi1−yˉi1)2,接下来我们就尝试把这个目标函数化为样本点X相关,过程很容易。
实际上
y
ˉ
i
1
=
0
\bar y_{i1} = 0
yˉi1=0,所以
∑
i
=
1
p
(
y
i
1
−
y
ˉ
i
1
)
2
=
∑
i
=
1
p
(
y
i
1
)
2
=
∑
i
=
1
p
[
a
1
(
X
i
−
X
ˉ
)
]
2
\sum_{i=1}^p(y_{i1}-\bar y_{i1})^2 =\sum_{i=1}^p(y_{i1})^2=\sum_{i=1}^p[a1(X_i-\bar X)]^2
∑i=1p(yi1−yˉi1)2=∑i=1p(yi1)2=∑i=1p[a1(Xi−Xˉ)]2
= ∑ i = 1 p [ a 1 ( X i − X ˉ ) ] [ a 1 ( X i − X ˉ ) ] T =\sum_{i=1}^p[a1(X_i-\bar X)][a1(X_i-\bar X)]^T =∑i=1p[a1(Xi−Xˉ)][a1(Xi−Xˉ)]T
= a 1 [ ∑ i = 1 p ( X i − X ˉ ) ( X i − X ˉ ) T ] a 1 T = a1[\sum_{i=1}^p(X_i-\bar X)(X_i-\bar X)^T] a1^T =a1[∑i=1p(Xi−Xˉ)(Xi−Xˉ)T]a1T
我们定义
∑
i
=
1
p
(
X
i
−
X
ˉ
)
(
X
i
−
X
ˉ
)
T
\sum_{i=1}^p(X_i-\bar X)(X_i-\bar X)^T
∑i=1p(Xi−Xˉ)(Xi−Xˉ)T为协方差矩阵
∑
\sum
∑(covariance matrix),这样目标函数可以简化为
M
a
x
m
i
z
e
a
1
∑
a
1
T
Maxmize \,\,a1\sum a1^T
Maxmizea1∑a1T,约束条件可以在a1方向上单位化,不影响方向表示,却可以极大简化后续计算。所以优化问题为,
M
a
x
m
i
z
e
(
a
1
∑
a
1
T
)
Maxmize \,\,(a_1\sum a_1^T)
Maxmize(a1∑a1T)
S
u
b
j
e
c
t
t
o
:
a
1
a
1
T
=
1
(1)
Subject \,to:\,a_1a_1^T = 1 \tag 1
Subjectto:a1a1T=1(1)
解优化问题
得到要解的优化问题后,又又又到了我们喜闻乐见的拉格朗日乘子法和求导运算,求极值的阶段了。(贴一下这位可爱的科学家)
这次优化问题的解相比于前面几篇支持向量机的推导要简单很多,我会用最简单的方法介绍,各位看官耐心且看。
首先利用拉格朗日乘子法构造函数
Θ
(
a
1
)
=
a
1
∑
a
1
T
−
λ
(
a
1
a
1
T
−
1
)
\Theta(a_1) = a_1\sum a_1^T - \lambda(a_1a_1^T-1)
Θ(a1)=a1∑a1T−λ(a1a1T−1)
接下来,祖传手艺求导,
∂
Θ
∂
a
1
=
(
∑
a
1
T
−
λ
a
1
T
)
T
=
0
\frac{\partial \Theta}{\partial a_1} = (\sum a_1^T - \lambda a_1^T)^T =0
∂a1∂Θ=(∑a1T−λa1T)T=0
所以,
∑
a
1
T
=
λ
a
1
T
(2)
\sum a_1^T = \lambda a_1^T \tag 2
∑a1T=λa1T(2),怎么样?看这个式子是不是很熟悉,没错,
a
1
T
a_1^T
a1T是协方差矩阵
∑
\sum
∑的特征向量,
λ
\lambda
λ是协方差矩阵
∑
\sum
∑的特征值。
怎么理解特征值和特征向量呢?比如我们把矩阵看作运动,对于运动而言,它最重要的特征当然是速度和方向,
- 特征值就表示运动的速度
- 特征向量就表示运动的方向
那这里的这里的特征值和特征向量表示什么意义呢?我们思考一波,我们要最大化
a
1
∑
a
1
T
a_1\sum a_1^T
a1∑a1T,由上面(1)式,也就是最大化
a
1
λ
a
1
T
a_1\lambda a_1^T
a1λa1T,又约束条件
a
1
a
1
T
=
1
a_1 a_1^T =1
a1a1T=1,所!以!我们就是要最大化特征值
λ
\lambda
λ(也就是最大化目标函数方差呀朋友萌!),到这里,我们总结出,
a
1
表
示
使
Y
分
布
方
差
最
大
的
方
向
,
{\color{red} a_1 表示使Y分布方差最大的方向},
a1表示使Y分布方差最大的方向,
而
λ
表
示
方
差
{\color{red}而 \lambda 表示方差}
而λ表示方差
所以
λ
\lambda
λ是
∑
\sum
∑最大的特征值,
a
1
a_1
a1是
∑
\sum
∑最大的特征值
λ
\lambda
λ对应的特征向量,并且
a
1
a
1
T
=
1
a_1 a_1^T =1
a1a1T=1。
Good job!我们找到了 a 1 a_1 a1,也就找到了二维问题中使方差最大的方向。
四、多维情况求解
解决掉可以直观想象的分布统计问题之后,我们来点稍有挑战性的,怎么求多维(N>2)向量除
a
1
a_1
a1外的其它维度
a
2
,
a
3
,
a
4
,
.
.
.
.
,
a
M
a_2,a_3,a_4,....,a_M
a2,a3,a4,....,aM呢?一开始,我们就说明矩阵A的各个维度实际上表示的是不同的方向,我们要在每个方向都尽可能使方差大,比如我们要找
a
2
a_2
a2方向,那么同样,
M
a
x
m
i
z
e
(
a
2
∑
a
2
T
)
Maxmize \,\,(a_2\sum a_2^T)
Maxmize(a2∑a2T)
S
u
b
j
e
c
t
t
o
:
a
2
a
2
T
=
1
Subject \,to: \,\,\,\,\,a_2a_2^T = 1
Subjectto:a2a2T=1
a
2
a
1
T
=
a
1
a
2
T
=
0
(3)
a_2a_1^T = a_1 a_2^T = 0 \tag 3
a2a1T=a1a2T=0(3),注意,这里唯一的不同就是,要添加
a
1
a_1
a1与
a
2
a_2
a2正交,说明在三维降二维时,
a
2
a_2
a2方向是唯一确定的,莫得选择。
接下来,继续祖传手艺拉格朗日乘子法加求导,引入系数
λ
\lambda
λ和
β
\beta
β,构造函数
Θ
(
a
1
)
=
a
2
∑
a
2
T
−
λ
(
a
2
a
2
T
−
1
)
−
β
a
1
a
2
T
\Theta(a_1) = a_2\sum a_2^T - \lambda(a_2a_2^T-1) - \beta a_1 a_2^T
Θ(a1)=a2∑a2T−λ(a2a2T−1)−βa1a2T接下来,和前面二维情况差不多,
∂
Θ
∂
a
2
=
(
∑
a
2
T
−
λ
a
2
T
−
β
a
1
T
)
T
=
0
\frac{\partial \Theta}{\partial a_2} = (\sum a_2^T - \lambda a_2^T-\beta a_1^T)^T =0
∂a2∂Θ=(∑a2T−λa2T−βa1T)T=0
以下,简单推导一下吧,方便理解,
∂
Θ
∂
a
2
=
(
a
2
∑
−
λ
a
2
−
β
a
1
)
T
=
0
\frac{\partial \Theta}{\partial a_2} = (a_2 \sum - \lambda a_2-\beta a_1)^T =0
∂a2∂Θ=(a2∑−λa2−βa1)T=0,两边同乘以
a
1
T
a_1^T
a1T,得到
∂
Θ
∂
a
2
=
(
a
2
∑
a
1
T
−
λ
a
2
a
1
T
−
β
(
a
1
a
1
T
)
)
T
=
0
\frac{\partial \Theta}{\partial a_2} = (a_2 \sum a_1^T - \lambda a_2a_1^T-\beta (a_1a_1^T))^T =0
∂a2∂Θ=(a2∑a1T−λa2a1T−β(a1a1T))T=0,就等于
∂
Θ
∂
a
2
=
(
a
2
λ
a
1
T
−
λ
a
2
a
1
T
−
β
)
=
0
\frac{\partial \Theta}{\partial a_2} = (a_2 \lambda a_1^T - \lambda a_2a_1^T-\beta) =0
∂a2∂Θ=(a2λa1T−λa2a1T−β)=0看看这个式子,u1s1,漂亮!全都能照着约束条件约去(现在体会到约束的好处了吧),得到
β
=
0
\beta =0
β=0,同时,
∑
a
2
T
=
λ
a
2
T
\sum a_2^T = \lambda a_2^T
∑a2T=λa2T,所以怎么样,是不是第二个优化问题(3)和第一个优化问题(1)就一样了?最大化
a
2
∑
a
2
T
=
λ
a_2\sum a_2^T = \lambda
a2∑a2T=λ,再次求最大的
λ
\lambda
λ,但是此时最大已经被
a
1
a_1
a1占去,咋办?嗐,退而求其次,取第二大吧。
所以,严肃严肃,我们要放大招了,抛出结论,
λ
是
∑
第
二
大
的
特
征
值
,
a
2
是
∑
第
二
大
的
特
征
值
λ
对
应
的
特
征
向
量
。
{\color{red} \lambda是\sum第二大的特征值,a_2是\sum第二大的特征值\lambda对应的特征向量。}
λ是∑第二大的特征值,a2是∑第二大的特征值λ对应的特征向量。
相信聪明的你已经猜到了NxM矩阵A的其他维度
a
3
,
a
4
,
.
.
.
.
,
a
M
a_3,a_4,....,a_M
a3,a4,....,aM的值了,就不用我一遍一遍重复推导了吧。
得出结论,
a
3
a_3
a3就是协方差矩阵
∑
\sum
∑第三大特征值对应的特征向量,依次类推。由此确定了NxM矩阵
A
=
[
a
1
a
2
a
3
.
.
.
a
M
]
A = \left[ \begin{matrix} a1\\ a2 \\ a3 \\ ... \\ a_M \\ \end{matrix} \right]
A=⎣⎢⎢⎢⎢⎡a1a2a3...aM⎦⎥⎥⎥⎥⎤,这就是一个M维度的坐标系呀,盆友萌,我们成功把N维坐标系的样本成功移到我们自己构建的M维坐标系上了呀,撒花撒花!其中每个轴都是我们自己辛苦求出来的哦。
五、总结一波
好的,经过你不懈的努力,总算把PCA算法盘下来了,我们最后总结一下,回顾一遍,你能有更深的理解。
- 拿到一堆样本,果断求协方差矩阵 ∑ = ∑ i = 1 p ( X i − X ˉ ) ( X i − X ˉ ) T \sum =\sum_{i=1}^p(X_i-\bar X)(X_i-\bar X)^T ∑=∑i=1p(Xi−Xˉ)(Xi−Xˉ)T;
- 有了结论,直接用。求出$\sum $的特征值及其对应的特征向量,并且从大到小排序,以备取用;
- 归一化所有的方向 a i a_i ai;
- 得到前M维方向向量 A = [ a 1 a 2 a 3 . . . a M ] A = \left[ \begin{matrix} a1\\ a2 \\ a3 \\ ... \\ a_M \\ \end{matrix} \right] A=⎣⎢⎢⎢⎢⎡a1a2a3...aM⎦⎥⎥⎥⎥⎤
- 得到M维坐标系后,果断把这P个在N维坐标系上的样本点映射过去,
Y
=
A
(
X
i
−
X
ˉ
)
Y = A(X_i - \bar X)
Y=A(Xi−Xˉ),其中i=1 到 P。
PCA:“小朋友,读到这里,你还有很多问号吗?”
创作不易,你的鼓励是我创作的动力,如果你有收获,点个赞吧👍 |
---|
我接下来还会陆续更新机器学习相关的学习笔记,补充这个系列。如果看到这里的话,说明你有认真看这篇文章,希望你能有所收获!最后,欢迎交流指正!
还有不明白的欢迎阅读其他文章:
通俗讲解支持向量机SVM(一)面试官:什么?线性模型你不会不清楚吧?
通俗讲解支持向量机SVM(二)另辟蹊径!对偶性的几何解释
通俗讲解支持向量机SVM(三)SVM处理非线性问题及软间隔之引出
通俗讲解支持向量机SVM(四)用尽洪荒之力把核函数与核技巧讲得明明白白(精华篇)