学习
实践
活动
专区
工具
TVP
写文章

《深度学习》读书笔记系列——机器学习算法实战之主成分分析

注:本篇公式推导内容较多,慎入

我们希望找到一个编码函数,根据输入返回编码, f(x) = c;我们也希望找到一 个解码函数,给定编码重构输入, x ≈ g(f(x))。 PCA 由我们选择的解码函数而定。具体地,为了简化解码器,我们使用矩阵乘 法将编码映射回 Rn,即 g(c) = Dc,其中 D 2 Rn×l 是定义解码的矩阵。

为了使问题有唯一解,我们限制 D 中所有列向量都有单位范数。计算这个解码器的最优编码可能是一个困难的问题。为了使编码问题简单一些,PCA限制D的列向量彼此正交(注意,除非 l = n,否则严格意义上 D不是一个正交矩阵)

我们需要明确如何根据每一个输入 x 得到一个最优编码 c∗。一种方法是最小化原始输入向量 x 和重构向量g(c∗) 之间的距离。我们使用范数来衡量它们之间的距离。在 PCA 算法中,我们使用 L2 范数:

我们可以用平方 L2 范数替代 L2 范数,因为两者在相同的值 c 上取得最小值。这是因为 L2 范数是非负的,并且平方运算在非负值上是单调递增的。

该最小化函数可以简化成

因为第一项 x⊤x 不依赖于 c,所以我们可以忽略它,得到如下的优化目标:

更进一步,我们代入 g(c) 的定义:

(矩阵 D 的正交性和单位范数约束)

我们可以通过向量微积分来求解这个最优化问题

这使得算法很高效:最优编码 x 只需要一个矩阵-向量乘法操作。为了编码向量,我们使用编码函数:

进一步使用矩阵乘法,我们也可以定义 PCA 重构操作:

因为用相同的矩阵 D 对所有点进行解码,我们不能再孤立地看待每个点。反之,我们必须最小化所有维数和所有点上的误差矩阵的 Frobenius 范数:

为了推导用于寻求 D∗ 的算法,我们首先考虑 l = 1 的情况。在这种情况下, D是一个单一向量 d。简化 D 为 d,问题简化为

在上述公式中,我们将标量 d⊤x(i) 放在向量 d 的右边。将该标量放在左边的写法更为传统。于是我们通常写作

或者,考虑到标量的转置和自身相等,我们也可以写作

此时,使用单一矩阵来重述问题,比将问题写成求和形式更有帮助。这有助于我们使用更紧凑的符号。将表示各点的向量堆叠成一个矩阵,记为 X 2 Rm×n,其中Xi;: = x(i)⊤。原问题可以重新表述为:

暂时不考虑约束,我们可以将 Frobenius 范数简化成下面的形式:

(与d无关的项不影响argmin)

(循环改变迹运算中相乘矩阵的顺序不影响结果)

此时,我们再来考虑约束条件:

这个优化问题可以通过特征分解来求解。具体来讲,最优的 d 是 X⊤X 最大特征值对应的特征向量。以上推导特定于 l = 1 的情况,仅得到了第一个主成分。更一般地,当我们希望得到主成分的基时,矩阵 D 由前 l 个最大的特征值对应的特征向量组成。这个结论可以通过归纳法证明。

近期文章回顾:

关于,你想了解的AI,你想知道的未来

《深度学习》读书笔记系列——开宗明要

《深度学习》读书笔记系列——线性代数(1)

《深度学习》读书笔记系列——线性代数(2)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180422A01DTF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券