我们提供安全,免费的手游软件下载!
Based on Deep Learning (2017, MIT) book.
本文基于 Deep Learning (2017, MIT) ,推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分。
blog
现代数据集,如网络索引、高分辨率图像、气象学、实验测量等,通常包含高维特征,高纬度的数据可能不清晰、冗余,甚至具有误导性。数据可视化和解释变量之间的关系很困难,而使用这种高维数据训练的神经网络模型往往容易出现过拟合(
维度诅咒
)。
主成分分析(PCA)是一种简单而强大的
无监督机器学习技术
,用于数据降维。它旨在从大型变量集中提取一个较小的数据集,同时尽可能保留原始信息和特征(
有损压缩
)。PCA有助于识别数据集中最显著和有意义的特征,使数据易于可视化。应用场景包括:统计学、去噪和为机器学习算法预处理数据。
这些知识对下一节的推导很重要。
需求描述
我们有 \(m\) 个点的 输入数据 ,表示为 \({x^{(1)},...,x^{(m)}}\) 在 \(\mathbb{R}^{n}\) 的实数集中。因此,每个点 \(x^{(i)}\) 是一个列向量,具有 \(n\) 维特征。
需要对输入数据进行有损压缩,将这些点编码以表示它们的较低维度版本。换句话说,我们想要找到编码向量
\(c^{(i)}\in \mathbb{R}^{l}\)
,
\((l
解码的 \(g(f(x))\) 是一组新的点(变量),因此它与原始 \(x\) 是近似的。存储 \(c^{(i)}\) 和解码函数比存储 \(x^{(i)}\) 更节省空间,因为 \(c^{(i)}\) 的维度较低。
解码矩阵
我们选择使用矩阵 \(D\) 作为解码矩阵,将编码向量 \(c^{(i)}\) 映射回 \(\mathbb{R}^{n}\) ,因此 \(g(c)=Dc\) ,其中 \(D\in \mathbb{R}^{n\times l}\) 。为了简化编码问题,PCA将 \(D\) 的列约束为彼此正交。
衡量重构的表现
在继续之前,我们需要弄清楚如何生成最优的编码点 \(c^{*}\) ,我们可以测量输入点 \(x\) 与其重构 \(g(c^*)\) 之间的距离,使用 \(L^2\) 范数(或欧几里得范数): \(c^{*}=\arg\min_c||x-g(c)||_2\) 。由于 \(L^2\) 范数是非负的,并且平方操作是单调递增的,所以我们可以转而使用平方的 \(L^2\) 范数:
向量的 \(L^2\) 范数是其分量的平方和,它等于向量与自身的点积,例如 \(||x||_2=\sqrt{\sum|x_i|^2}=\sqrt{x^Tx}\) ,因此平方的 \(L^2\) 范数可以写成以下形式:
由分配率:
由于 \(x^Tg(c)\) 和 \(g(c)^Tx\) 是标量,标量等于其转置, \((g(c)^Tx)^T=x^Tg(c)\) ,所以:
为了找到使上述函数最小化的 \(c\) ,第一项可以省略,因为它不依赖于 \(c\) ,所以:
然后用 \(g(c)\) 的定义 \(Dc\) 进行替换:
由于 \(D\) 的正交性和单位范数约束:
目标函数
现在目标函数是 \(-2x^TDc+c^Tc\) ,我们需要找到 \(c^*\) 来最小化目标函数。使用向量微积分,并令其导数等于0:
根据向量导数规则:
找到编码矩阵 \(D\)
所以编码器函数是 \(f(x)=D^Tx\) 。因此我们可以定义 PCA 重构操作为 \(r(x)=g(f(x))=D(D^Tx)=DD^Tx\) 。
因此编码矩阵 \(D\) 也被重构过程使用。我们需要找到最优的 \(D\) 来最小化重构误差,即输入和重构之间所有维度特征的距离。这里使用 Frobenius 范数(矩阵范数)定义目标函数:
从考虑 \(l=1\) 的情况开始(这也是第一个主成分), \(D\) 是一个单一向量 \(d\) ,并使用平方 \(L^2\) 范数形式:
\(d^Tx^{(i)}\) 是一个标量:
标量等于其自身的转置:
使用矩阵形式表示
令 \(X\in \mathbb{R}^{m\times n}\) 表示所有描述点的向量堆叠,即 \(\{x^{(1)^T}, x^{(2)^T}, \ldots, x^{(i)^T}, \ldots, x^{(m)^T}\}\) ,使得 \(X_{i,:}=x^{(i)^T}\) 。
矩阵中的一行的转置:
由于 \(d^Tx^{(i)}\) 是标量:
所以我们知道 \(X\) 的第 \(i\) 行的 \(L^2\) 范数与原始形式相同,因此我们可以使用矩阵重写问题,并省略求和符号:
利用矩阵迹规则简化 Frobenius 范数部分如下:
由于 \(d^Td=1\) :
由于迹是循环置换不变的,将方程重写为:
由于 \(d^TX^TXd\) 是实数,因此迹符号可以省略:
寻找最优的 \(d\)
现在的问题是找到最优的 \(d\) 来最大化 \(d^TX^TXd\) ,并且有约束条件 \(d^Td=1\) 。
使用拉格朗日乘子法来将问题描述为关于 \(d\) 的形式:
对 \(d\) 求导数(向量导数规则):
令导数等于0, \(d\) 将是最优的:
这个方程是典型的矩阵特征值分解形式, \(d\) 是矩阵 \(X^TX\) 的特征向量, \(\lambda'\) 是对应的特征值。
利用上述结果,让我们重新审视原方程:
现在问题已经变的非常清楚了, \(X^TX\) 的最大特征值会最大化原方程的结果,因此最优的 \(d\) 是矩阵 \(X^TX\) 对应最大特征值的特征向量。
这个推导是针对 \(l=1\) 的情况,只包含第一个主成分。当 \(l>1\) 时, \(D=[d_1, d_2, \ldots]\) ,第一个主成分 \(d_1\) 是矩阵 \(X^TX\) 对应最大特征值的特征向量,第二个主成分 \(d_2\) 是对应第二大特征值的特征向量,以此类推。
我们有一个数据集,包含
\(m\)
个点,记为
\({x^{(1)},...,x^{(m)}}\)
。
令
\(X\in \mathbb{R}^{m\times n}\)
为将所有这些点堆叠而成的矩阵:
\([x^{(1)^T}, x^{(2)^T}, \ldots, x^{(i)^T}, \ldots, x^{(m)^T}]\)
。
主成分分析(PCA)编码函数表示为 \(f(x)=D^Tx\) ,重构函数表示为 \(x\approx g(c)=Dc\) ,其中 \(D=[d_1, d_2, \ldots]\) 的列是 \(X^TX\) 的特征向量,特征向量对应的特征值大小为降序排列。 \(D^Tx\) 即是降维度之后的数据。
热门资讯