版权声明:本文为博主原创文章,转载请注明出处和作者,商业转载请联系作者(huxingfei097@163.com),谢谢合作!
本节内容涉及对主成分分析算法的推导,推导主要应用线性代数知识,如果对线性代数知识不太熟悉,可以参考我的上一篇文章:深度学习(一):线性代数基础
-
概念:
主成分分析(principal components analysis, PCA)是一个简单的机器学习降维算法。通俗的讲,PCA降维就是通过线性变换,减少数据维度,保留数据主要的信息。在机器学习中,该技术多应用于数据可视化和特征选择,由于处理的数据是无标签的,通过维度的线性变换而来,所以是无监督降维方法。 -
直观解释:
数据集合中的样本由实数空间(正交坐标系)中的点表示,空间中的一个坐标轴表示一个变量,规范化处理后得到的数据分布在原点(空间中的原点)附近。主成分分析就是对坐标系进行旋转变换,将数据投影到新坐标系的坐标轴上:新坐标系的第一坐标轴、第二坐标轴等分别表示第一主成分、第二主成分等,数据在每一轴上的坐标值的平方表示相应变量的方差,并且,这个坐标系是在所有可能的新的坐标系中,坐标轴上的方差最大的。下图展示了在二维空间中对一个斜椭圆进行主成分分析(其中,x1,x2为原坐标轴,y1,y2为主成分分析变换之后的坐标系,y1为第一主成分对应原椭圆的长轴,y2为第二主成分对应原椭圆的短轴):
主成分分析示例 | 主成分分析的几何解释 |
上方右图是主成分分析的几何解释。主成分分析要求在新的坐标轴中方差最大,即意味着,对于样本点 A,B,C,投影到y1上得到A',B',C',OA'2 + OB'2 + OC'2最大,等价于样本点到y1轴的距离的平方和AA'2 + AB'2 + AC'2最小。所以,主成分分析在旋转变换中等价于选取离样本点的距离平方和最小的轴,作为第一主成分,第二主成分的选取,在保证与已选坐标轴正交的条件下,类似的进行。
-
算法过程:
主成分分析,首先要对给定数据进行规范化,使得每一变量的平均值为0,方差为1,然后顺序地找一组相互正交的坐标轴。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,从而实现对数据特征的降维处理。 -
主成分分析的求解:
** 设 x 是 m 维随机变量,∑ 是x的协方差矩阵,∑的特征值分别是 λ1 ≥ λ1 ≥ λ2 ≥ ... ≥ λm ≥ 0,特征值对应的单位向量分别是 α1,α2 ... αm,则 x 的第k主成分是:
yk = αkT x = α1kx1 + α2kx2 + ... +αmkxm
x 的第k主成分的方差是:
var(yk) = αkT Σ αk, k = 1,2,3,...,m
即协方差矩阵的第k个特征值(若特征值有重根,对应的特征向量组成m维空间Rm的一个子空间,子空间的维数等于重根数,在子空间任取一个正交坐标系,这个坐标系的单位向量可作为特征向量,取法不唯一!)。 -
具体推导(拉格朗日乘子法):
先求 x 的第一主成分 y1 = α1T x。即求系数向量 α1,其中 α1 是在α1T α1 = 1的条件下,x 的所有线性变换中使方差 var(α1 x) = α1T Σα1 ( 注意:Σ 不是求和符号,而是协方差矩阵,Σ = cov( x , x ) =E[( x - μ)( x - μ)T] )达到最大(求解约束最优化问题)。
maxα1 = α1T Σ α1 s.t α1T α1 = 1
定义拉格朗日函数:
α1T Σα1 - λ(α1T α1 - 1)
对 α1 求导,并令其为0,得:
Σα1 - λ α1 = 0
因此,λ 是Σ 的特征值,α1 是对应的单位向量。即:
α1T Σ α1 = α1T λ α1 = λ α1T α1 = λ
所以,α1T x,构成第一主成分,其方差对于协方差矩阵的最大特征值:
var(α1T x) = α1T Σ α1 = λ1
接着求x的第二主成分 y2 = α2T x,第二主成分是在α2 是在α2Tα2 = 1,且 α2T x 与 α1T x 不相关的条件下,x 的所有线性变换中使方差 var(α2T x ) = α2T Σ α2 达到最大的。
求第二主成分同样需要求解约束最优化问题。
maxα2 α2T Σ α2 α1T Σ α2 = 0,α2T Σ α1,α2T α2 = 0
注意到:
α1T Σ α2 = α2T Σ α1 = α2T λα1 = λ α2T α1 = λ α1T α2
并且:
α1T α2 = 0 α2T α1 = 0
定义拉格朗日函数:
α2T Σ α2 - λ(α2T α2 - 1) - фα2T α1
其中 λ,ф都是拉格朗日乘子,对 α2 求导,并令其为0,得到:
2Σ α2 - 2λ α2 - фα1 = 0
将方程左乘 α1T:
2α1TΣα2 - 2λ α1T α2 - фα1T****α1 = 0
此式子前两项为0,且 α1T****α1 = 1,得出 ф = 0,则拉格朗日函数导数可以表示为:
Σα2 - λ α2 = 0
因此,λ是Σ的特征值,α2是对应的单位向量。即:
α2T Σ α2 = α2T λ α2 = λα2T α2 = λ
于是 α2T x 构成第二主成分,其方差对于协方差矩阵的第二大特征值:
var(α2T x) = α2T α2 = λ2
以此类推, x 的第 k 主成分是 αkT x,并且 var(αkT x) = λk,其中,λk是 Σ 的第k个特征值,并且是 αk 对应的单位特征向量。
花书上采用的是计算 Frobenius 范数来推导的,个人感觉要难懂一些,感兴趣可以看一下
推导过程:
通常使用矩阵乘法来实现PCA。对于每一个点x(i)∈Rn,会存在一个编码后的对应向量c(i)∈Rl(一般l会小于n)。为了简化,使用矩阵乘法将编码后的向量映射回 Rn,即满足 x ≈ g(c) = D c,其中D∈Rn * l 是定义的解码矩阵。
PCA算法限定 D 中的列向量彼此正交,并且都有单位范数。
首先需要明确的是如何根据每一个输入 x 得到一个最优编码 c 。一种做法是使用 L2 范数来衡量原始向量 x 与重映射后的结果 g(c)之间的距离。在PCA算法中,使用 L2 范数:
该最小化函数可以简化为:
(x -g(c))T (x -g(c))
= xT x - xT g(c) - g(c)T x + g(c)T g(c)
= xT x - 2xT g(c) + g(c)T g(c) (g(c)Tx是一个标量,转置为自身)
因为第一项xT x不依赖于c,所以可以忽略得到下述优化目标:
c* = (arg min)c - 2xT g(c) + g(c)T g(c)
更进一步,代入g(c)的定义可得:
c* = (arg min)c - 2xT D c + cT DT D c
(矩阵D的正交性和单位范数约束)
= (arg min)c - 2xT D c + cT Il c
= (arg min)c - 2xT D c + cTc
可以通过向量微积分来求解该最优化问题(如果不太清楚矩阵求导,可以参考:矩阵求导术)
∇c (- 2xT D c + cTc) = 0
- 2DT x + 2c = 0
c = DT x
即若要得到最优编码 c,只需要一个矩阵向量乘法即可,可令 f(x) = DT x,进一步使用矩阵乘法,还可以定义PCA重构(即重新升维到x的维度)操作:
(x≈)r(x) = g(f(x)) = D DT x
接下来需要挑选编码矩阵D。可以采用最小化所有维度上点的误差矩阵的Frobenius范数: 为了推导求D* 的算法,可以先考虑 l = 1 的情况(即降维至一维),这种情况下D 是一个单一向量 d,带入r(x)上式可化为:
进一步整理可得(dT x(i) 是一个标量):
将表示各点的向量堆叠成一个矩阵,记为X∈Rm * n ,其中Xi, = x(i)T。则原问题可以重新描述为:
暂不考虑约束,可以将Frobenius范数简化为如下形式(采用迹运算来表示Frobenius范数): (因为与d无关的项不会影响到arg min) (因为循环改变迹运算中相乘矩阵的顺序不影响,可进一步变换) 此时再来考虑约束条件: 这个优化问题可以通过特征分解来求解,即最优的d 是 XTX最大特征值对应的特征向量。
以上的推导是基于 l =1 的情况的,仅仅得到了第一个主成分。当我们希望得到主成分的基时,矩阵D由前l个最大的特征值对应的特征向量组成。
参考资料:
《深度学习》
《统计学习方法》
深度学习新手,文章若有疏漏,欢迎及时指正!
网友评论