【数学】主成分分析(PCA)的详细深度推导过程
Based on Deep Learning (2017, MIT) book.
本文基于Deep Learning (2017, MIT),推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分。
blog
1 概述
现代数据集,如网络索引、高分辨率图像、气象学、实验测量等,通常包含高维特征,高纬度的数据可能不清晰、冗余,甚至具有误导性。数据可视化和解释变量之间的关系很困难,而使用这种高维数据训练的神经网络模型往往容易出现过拟合(维度诅咒)。
主成分分析(PCA)是一种简单而强大的无监督机器学习技术,用于数据降维。它旨在从大型变量集中提取一个较小的数据集,同时尽可能保留原始信息和特征(有损压缩)。PCA有助于识别数据集中最显著和有意义的特征,使数据易于可视化。应用场景包括:统计学、去噪和为机器学习算法预处理数据。
- 主成分是什么?
主成分是构建为原始变量的线性组合的新变量。这些新变量是不相关的,并且包含原始数据中大部分的信息。
2 背景数学知识
这些知识对下一节的推导很重要。
- 正交向量和矩阵:
- 如果两个向量垂直,则它们是正交的。即两个向量的点积为零。
- 正交矩阵是一个方阵,其行和列是相互正交的单位向量;每两行和两列的点积为零,每一行和每一列的大小为1。
- 如果\(A^T=A^{-1}\)或\(AA^T=A^TA=I\),则\(A\)是正交矩阵。
- 在机器人学中,旋转矩阵通常是一个\(3\times3\)的正交矩阵,在空间变换中它会旋转向量的方向但保持原始向量的大小。
- 矩阵、向量乘法规则:
- \((AB)^T=B^TA^T\),两个矩阵的乘积的转置。
- \(\vec{a}^T\vec{b}=\vec{b}^T\vec{a}\),两个结果都是标量,标量的转置是相同的。
- \((A + B)C = AC + BC\),乘法是可分配的。
- \(AB \neq{} BA\),乘法一般不满足交换律。
- \(A(BC)=(AB)C\),乘法满足结合律。
- 对称矩阵:
- \(A=A^T\),\(A\)是对称矩阵。
- \(X^TX\)是对称矩阵,因为\((X^TX)^T=X^TX\)。
- 向量导数规则(\(B\)是常量矩阵):
- \(d(x^TB)/dx=B\)
- \(d(x^Tx)/dx=2x\)
- \(d(x^TBx)/dx=2Bx\)
- 矩阵迹规则:
- \(Tr(A)=Tr(A^T)\)
- \(Tr(AB)=Tr(BA)\)
- \(Tr(A)=\sum_i{\lambda_i}\),其中\(\lambda\)是\(A\)的特征值。
- 迹在循环移位下不变:\(Tr(ABCD)=Tr(BCDA)=Tr(CDAB)=Tr(DABC)\)
- 向量和矩阵范数:
- 向量的\(L^2\)范数,也称为欧几里得范数:\(||x||_2=\sqrt{\sum_i|x_i|^2}\)。
- 通常使用平方的\(L^2\)范数来衡量向量的大小,可以计算为\(x^Tx\)。
- Frobenius范数用于衡量矩阵的大小:\(||A||_F=\sqrt{\sum_{i,j}A^2_{i,j}}\)
- Frobenius范数是所有矩阵元素的绝对平方和的平方根。
- Frobenius范数是矩阵版本的欧几里得范数。
- 特征值分解和特征值:
- 方阵\(A\)的特征向量是一个非零向量\(v\),使得\(A\)的乘法仅改变\(v\)的比例:\(Av=\lambda v\)。\(\lambda\)是特征值,\(v\)是特征向量。
- 假设矩阵\(A\)有\(n\)个线性无关的特征向量\(v^{(i)}\),我们可以将所有特征向量连接起来形成一个矩阵\(V=[v^{(1)},\ldots,v^{(n)}]\),并通过连接所有特征值\(\lambda=[\lambda_1,\ldots,\lambda_n]^T\)形成一个向量,那么\(A\)的特征分解是\(A=Vdiag(\lambda)V^{-1}\)
- 每个实对称矩阵都可以分解为\(A=Q\Lambda Q^T\),其中\(Q\)是由\(A\)的特征向量组成的正交矩阵,\(\Lambda\)(读作'lambda')是一个对角矩阵。
- 拉格朗日乘数法:
- 拉格朗日乘数法是一种在方程约束下寻找函数局部最大值和最小值的策略。
- 一般形式:\(\mathcal{L}(x,\lambda)=f(x)+\lambda\cdot g(x)\),\(\lambda\)称为拉格朗日乘子。
3 详细PCA推导
需求描述
我们有\(m\)个点的输入数据,表示为\({x^{(1)},...,x^{(m)}}\)在\(\mathbb{R}^{n}\)的实数集中。因此,每个点\(x^{(i)}\)是一个列向量,具有\(n\)维特征。
需要对输入数据进行有损压缩,将这些点编码以表示它们的较低维度版本。换句话说,我们想要找到编码向量\(c^{(i)}\in \mathbb{R}^{l}\),\((l<n)\)来表示每个输入点\(x^{(i)}\)。我们的目标是找到产生输入的编码向量的编码函数\(f(x)=c\),以及相应的重构(解码)函数\(x\approx g(f(x))\),根据编码向量\(c\)计算原始输入。
解码的\(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}\)。
Xd = \begin{bmatrix} x^{(1)^T}d\\ x^{(2)^T}d\\ \ldots\\ x^{(m)^T}d \end{bmatrix} \]
\begin{bmatrix}
x^{(1)^T}dd^T\\
x^{(2)^T}dd^T\\
\ldots\\
x^{(m)^T}dd^T\\
\end{bmatrix}
\]
\begin{bmatrix}
x^{(1)^T}-x^{(1)^T}dd^T\\
x^{(2)^T}-x^{(2)^T}dd^T\\
\ldots\\
x^{(m)^T}-x^{(m)^T}dd^T\\
\end{bmatrix}
\]
矩阵中的一行的转置:
\]
由于 \(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\) 是对应第二大特征值的特征向量,以此类推。
4 总结
我们有一个数据集,包含 \(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\)即是降维度之后的数据。
【数学】主成分分析(PCA)的详细深度推导过程的更多相关文章
- 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)
学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...
- 主成分分析(PCA)原理及推导
原文:http://blog.csdn.net/zhongkejingwang/article/details/42264479 什么是PCA? 在数据挖掘或者图像处理等领域经常会用到主成分分析,这样 ...
- 机器学习降维方法概括, LASSO参数缩减、主成分分析PCA、小波分析、线性判别LDA、拉普拉斯映射、深度学习SparseAutoEncoder、矩阵奇异值分解SVD、LLE局部线性嵌入、Isomap等距映射
机器学习降维方法概括 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014772862/article/details/52335970 最近 ...
- 线性判别分析(LDA), 主成分分析(PCA)及其推导【转】
前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA ...
- 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening
主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通过PCA降维,我们能够有效的降低数据的维度,加快运算速度.而白化就是为了使得每个特征能有同 ...
- 降维(一)----说说主成分分析(PCA)的源头
降维(一)----说说主成分分析(PCA)的源头 降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps --------------- ...
- 一步步教你轻松学主成分分析PCA降维算法
一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...
- 05-03 主成分分析(PCA)
目录 主成分分析(PCA) 一.维数灾难和降维 二.主成分分析学习目标 三.主成分分析详解 3.1 主成分分析两个条件 3.2 基于最近重构性推导PCA 3.2.1 主成分分析目标函数 3.2.2 主 ...
- 机器学习--主成分分析(PCA)算法的原理及优缺点
一.PCA算法的原理 PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可 ...
- 主成分分析(PCA)原理与实现
主成分分析原理与实现 主成分分析是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 \(n×m\)的矩阵转换成\(n×k\)的矩阵,仅保留矩阵中所存在的主要特性,从 ...
随机推荐
- 感慨 vscode 支持win7最后一个版本 1.70.3 于2022年7月发布
为什么 家里电脑一直是win7,也懒的升级,nodejs也不能用最新的,没想到vscode也停产了 https://code.visualstudio.com/updates/v1_70 后记 别用u ...
- Python isinstance() 函数含义及用法解析
描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关 ...
- C++11 中运行代码块耗时的方法以及坑(chrono 方法)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- PAT 甲级【1013 Battle Over Cities】
本题就是dfs.连通图个数-2: 但是java慢,最后一个case 超时 import java.io.*; import java.util.HashSet; import java.util.Se ...
- [STM32]STM32双机串口通信
[STM32]STM32双机串口通信 上一篇的通信方案在发送端高强度通信下寄了,发现是函数HAL_UART_Transmit()的锅,一个函数居然能跑0.3s左右...于是打算选用DMA收发数据,但是 ...
- drf(过滤、排序、异常)
一. 过滤组件 1 内置过滤组件SearchFilter # 缺点: 外键字段的搜索操作将会抛出异常: Related Field got invalid lookup: icontains # 1) ...
- Python实现SQL注入脚本
实验环境 攻击主机IP:172.18.53.145 目标主机IP:172.18.53.11 此处的靶场是Vulnhub中的WEB MACHINE: (N7) 靶场测试 访问靶场的登录页面,使用sqlm ...
- 记录--用css画扇形菜单
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.效果图 用手机录屏再用小程序转换的gif,可能精度上有点欠缺. 2.实现过程 1.观察及思考 开始编码前我们首先观察展开后的结构:两个 ...
- 记录--Vue 3 中的极致防抖/节流(含常见方式防抖/节流)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 今天给大家带来的是Vue 3 中的极致防抖/节流(含常见方式防抖/节流)这篇文章,文章中不仅会讲述原来使用的防抖或节流方式,还会带来新的一 ...
- ps去除图片中间部分并拼合
今天分享一个用ps去除图片中间部分后,把剩下的部分拼合的技术. 需求 下面这张图,需要去掉第三列(顺丰包邮价) ps处理过程 1.导入图片到ps软件 快捷键方式:Ctrl + O: 手动打开方式:点击 ...