点赞再看,养成习惯,您动动手指对原创作者意义非凡
备战秋招面试 微信搜索公众号【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
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算法盘下来了,我们最后总结一下,回顾一遍,你能有更深的理解。
PCA:“小朋友,读到这里,你还有很多问号吗?”
创作不易,你的鼓励是我创作的动力,如果你有收获,点个赞吧 |
---|
我接下来还会陆续更新机器学习相关的学习笔记,补充这个系列。如果看到这里的话,说明你有认真看这篇文章,希望你能有所收获!最后,欢迎交流指正!
还有不明白的欢迎阅读其他文章:
通俗讲解支持向量机SVM(一)面试官:什么?线性模型你不会不清楚吧?
通俗讲解支持向量机SVM(二)另辟蹊径!对偶性的几何解释
通俗讲解支持向量机SVM(三)SVM处理非线性问题及软间隔之引出
通俗讲解支持向量机SVM(四)用尽洪荒之力把核函数与核技巧讲得明明白白(精华篇)