大数据,机器学习,人工智能深度学习-推荐系统-CV-NLP算法

深度学习(二):主成分分析算法

2019-08-08  本文已影响2人  交大小浪花
版权声明:本文为博主原创文章,转载请注明出处和作者,商业转载请联系作者(huxingfei097@163.com),谢谢合作!

本节内容涉及对主成分分析算法的推导,推导主要应用线性代数知识,如果对线性代数知识不太熟悉,可以参考我的上一篇文章:深度学习(一):线性代数基础

主成分分析示例 主成分分析的几何解释

  上方右图是主成分分析的几何解释。主成分分析要求在新的坐标轴中方差最大,即意味着,对于样本点 A,B,C,投影到y1上得到A',B',C',OA'2 + OB'2 + OC'2最大,等价于样本点到y1轴的距离的平方和AA'2 + AB'2 + AC'2最小。所以,主成分分析在旋转变换中等价于选取离样本点的距离平方和最小的轴,作为第一主成分,第二主成分的选取,在保证与已选坐标轴正交的条件下,类似的进行。

花书上采用的是计算 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 范数:

  可以使用平方 L2 范数来替代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) (因为循环改变迹运算中相乘矩阵的顺序不影响,可进一步变换) 此时再来考虑约束条件: 这个优化问题可以通过特征分解来求解,即最优的dXTX最大特征值对应的特征向量。
  以上的推导是基于 l =1 的情况的,仅仅得到了第一个主成分。当我们希望得到主成分的基时,矩阵D由前l个最大的特征值对应的特征向量组成。

参考资料:
  《深度学习》
  《统计学习方法》
深度学习新手,文章若有疏漏,欢迎及时指正!

上一篇 下一篇

猜你喜欢

热点阅读