【数学】主成分分析(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\)的矩阵,仅保留矩阵中所存在的主要特性,从 ...
随机推荐
- vue3 如果用ts,导出时候要用 defineComponent,这俩是配对的,为了类型的审查正确
vue3 如果用ts,导出时候要用 defineComponent,这俩是配对的,为了类型的审查正确
- c语言运算符优先级实例解析
壹: 对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符.逻辑运算符中"逻辑非 !"除外.这是程序员总结出来的最快的学习方式. 可在实战 ...
- 三种方式使用纯 CSS 实现星级评分
本文介绍三种使用纯 CSS 实现星级评分的方式.每种都值得细品一番~ 五角星取自 Element Plus 的 svg 资源 <svg xmlns="http://www.w3.org ...
- 【个人笔记】2023年搭建基于webpack5与typescript的react项目
写在前面 由于我在另外的一些文章所讨论或分析的内容可能基于一个已经初始化好的项目,为了避免每一个文章都重复的描述如何搭建项目,我在本文会统一记录下来,今后相关的文章直接引用文本,方便读者阅读.此文主要 ...
- Linux安装jdk和mysql
Linux安装jdk和mysql JDK安装 操作步骤: 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux空jdk-8u171-inux-x64.tar.gz(这里注意自己 ...
- 记录--Vue2屎山之 Table 屎山
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 Vue2 将在 2023 年年底停止维护了,但是 Vue2 的代码却不会在 2023 年消失,还会越来越多:难以想象几十万行或者几百 ...
- 工作中常用且容易遗忘的 CSS 样式清单
注:本文转载自公众号 Vue中文社区的一篇文章 1.文字超出部分显示省略号 单行文本的溢出显示省略号(一定要有宽度) p{ width:200rpx; overflow: hidden; ...
- verilog中的数据类型
Verilog中的数据格式 1.基本概念 verilog中写一个数据的通用格式是 n'b000_000_···_000,表示一个n位的二进制数.基于这个通用式,可以将其分为三个部分:位数.加权数和实际 ...
- KingbaseESV8R6用户登录失败自动锁定后解锁遇到权限问题
测试用户登录失败自动锁定 创建用户tee并授权. TEST=# create user tee; CREATE ROLE TEST=# alter user tee with createdb; AL ...
- 8分钟搞懂Java中的各种锁
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/f9fc66cb.html 前言 你好,我是测试蔡坨坨. 在前几篇Redis相关文章中都说到了锁,同时我们在参加设计评审或者c ...