本征正交分解(POD)入门(详解)

2023-11-13

        思来想去还是把题目从“简介”改成了“入门(详解)”,其实详解主要就是针对可能没接触过矩阵论的同学,我也是研一才学的,入门是指的我会解释一些名词,方便理解。另外PCA(主成分分析)本质上就是POD,只是我最近翻的热工学论文大部分都用的POD这个名字,而数据分析(或机器学习)方面似乎用PCA这个名字多一些,所以还是以这个名字做了。

       本来大部分内容早就完成了,但是一直苦于对降维后的数据处理问题不甚了解,所以翻了很久的资料。因为降维后的数据与元数据并没有直接的数值上的联系,并且也没有明确的物理意义,因此这里的理解卡了很久,现在才知道,降维后的数据与原数据的联系其实中间还包括有均值、特征向量、主成分之间的数值关系,也就是重建的过程。迷惑在这个地方的同学还要重点理一下降维种的两种方法:特征选择和特征抽取。特征选择是从全集中选出子集,而特征抽取则是通过已有特征的组合建立一个新的特征子集。

        本征正交分解(Proper orthogonal decomposition),也称为主成分分析法(Principal Components Analysis, PCA)[1-2]。第一次读文献时翻译成了“适当的正交分解”,一头雾水。然后查了半天“适当的正交分解”也没找到,后来直接搜的POD才知道这东西叫本征正交分解。与另一个名字相比,本征正交分解实在不常见:主成分分析。本文是参考文献 [3] 和博客按自己理解写的,有不正确之处恳请指出,互相学习。

1、标准本征正交分解数学模型简介

        本征正交分解(以下均称为POD)是一种源于矢量数据统计分析的方法,广泛应用于数据降维,流场分析等等(自己理解的)。

        考虑对同一种现象测量 m 次,每次测量值为包含大量 n 个实数项的向量 x_{k}(这里 x_{k} 为第k个 n 行列向量), k= 1,2,...,m (例如 x_{k} 可以是在第 k 次实验中获得的数字图像)。数据统计分析的一个重要目标就是发现数据中的相互依赖性,并将数据集减少到参数 r<<n 的更小数量。数学上这种情况可以描述为一种优化问题:

x 为实数空间 R^{n} 中的随机实向量,E 为期望值,上式本质上就是求最小均方差,P 为秩 r 的投影算子,即:

设矩阵 W ,则上述问题对于协方差矩阵的 r 主特征向量有一个解:

设 为 W 的有序特征值,且 vk 对应的正交归一化特征向量,即:

则一个最佳的 P 是正交投影:

当且仅当 时,P唯一。

在统计学应用中,Wx常用估计值代替:

其中xk为测量向量,并假设其独立,并且 X 为 n*m 矩阵,其列为 xk 。

以上推到参考麻省理工的讲义[6],有需要且找不到的私聊。

2、一些名词就是

        这部分就针对已经学过线性代数和统计的同学说了,没学过的话那你可以学一遍再搞这些东西了,真的很重要。

(1)优化:优化问题基本就不需要解释了,高中应该就有,比如线性规划、最小二乘等等。

(2)矩阵的秩r(rank):通过矩阵的初等变换,获得(行/列)秩,基本形式见线性代数。

(3)期望值E(Expected value):其实就是平均值。

(4)投影算子:投影和算子其实是分开的,我们通常也可以看到某某算子(sobel算子等),算子的概念就是函数概念的推广,你可以把它理解成函数,但是它实际上就你在高中学函数之前的“映射”概念!投影就比较有意思了。投影其实就有了降维的含义,根据[5]:

            投影算子是在赋范线性空间X上具有幂等性的有界线性算子

            设P是X上的有界线性算子,如果 P^{^{2}}=P,则称P为投影算子。

            当P是投影算子时,I-P也是投影算子,且X=PX+(I-P)X。

       其实上面讲到投影算子时,P=VU,UV = Ir 就是根据 P^{^{2}}=P 推出来的。即 P 为投影算子。则 P^{^{2}}=P ,令P=VU,则P^{2}=VUVU,且 UV=I_{r} ,显然 P^{2}=VI_{r}U=P 。

(5)散布矩阵:协方差矩阵。

3、MATLAB 中的函数为pca,可以通过查看帮助文档查看参数。

 

注:其实理论部分早就写完了,但是在实际做的过程中做到降维之后不知道怎么用数据了,后来看到有些文献里发现是对降维后的数据加上均值,主要在数字图像处理中看到的。

4、算例及其他补充

       其实从PCA的角度来说有很多非常详细的推到,PCA最早源于通信理论中的K-L变换。1901年由Pearson第一次提出主要成分分析的方法,直到1963年Karhunan Loeve对该问题的归纳经历了多次的修改[7]。

        以下参考主要来源于《精通Matlab数字图像处理与识别》(理论推到十分详细,自行参考):

        PCA计算实例:

(1)问题描述:计算下面两维数据集合的主成分,并利用PCA方法将数据降至一维和二维。然后尝试利用1个和两个主成分实现对第一个样本的重构。

                                                  X={(1,2),(3,3),(3,5),(5,4),(5,6),(6,5),(8,7),(9,8)}

(2) 计算散布矩阵S的本征向量:

首先计算协方差矩阵S(n-1 倍的系数不会影响本征向量的计算):

样本均值:\overrightarrow{m}=(5,5)

                                                         S=\sum_{i=1}^{8}(\overrightarrow{x}_{i}-\overrightarrow{m})(\overrightarrow{x}_{i}-\overrightarrow{m})^{T}=\begin{bmatrix} 6.25 &4.25 \\ 4.25 & 3.5 \end{bmatrix}

(3)计算协方差矩阵特征值(自行计算)

                                                                                \lambda _{1}=9.34,\lambda _{2}=0.41

 (4)计算特征向量(MATLAB结果):

注意:这里要使特征向量正交归一化,而MATLAB的eig函数好像是具有这个能力的。e1,e2维特征向量加了均值得到的主轴。

(5)降至1维:

通过将8个样本点向其主 e1 投影可以得到这8个样本点的一维表示(偷个懒,截图了),这里向e1 投影而不向 e2 投是有原因的,按数学原理,应对特征值按从大到小排列,e1 对应的特征值最大:

(6)降至2维

(7)重构:

利用第一个主成分分析得到的降维数据进行重构,如果只对第一个(1,2)进行,则:

重构就是:均值+sum(基*主成分)

当然用于衡量精度的方法可以采用欧式距离:

最后的结论说明:PCA算法中,一般取主成分得分来表示降维后所含有的信息量,而所选用的主成分越多,则其所含有的信息越大,重构得到的数值也就精度越高(这种说法是自己总结的,可能不是很准确)。

参考:

1、https://ww2.mathworks.cn/matlabcentral/fileexchange/58737-pod-moo-m

2、冯俞楷, 杜小泽, 杨立军. 非稳态导热基于温度梯度的本征正交分解降维方法[J]. 中国科学:技术科学, 2018(1).

3、Taehyun Jo, Bonchan Koo, Hyunsoo Kim, Dohyung Lee, Joon Yong Yoon,Effective sensor placement in a steam reformer using gappy proper orthogonal decomposition,Applied Thermal Engineering,Volume 154,2019,Pages 419-432,ISSN 1359-4311,

4、http://blog.codinglabs.org/articles/pca-tutorial.html

5、陈永林. 加权投影算子与加权广义逆矩阵[J]. 应用数学学报, 1983, 6(3):282-291.

6、Proper Orthogonal Decomposition,Massachusetts Institute of Technology,Department of Electrical Engineering and Computer Science,2004。
7、张铮. 精通Matlab数字图像处理与识别[M]. 2013.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

本征正交分解(POD)入门(详解) 的相关文章

  • SPMD 与 Parfor

    我对 matlab 中的并行计算很陌生 我有一个创建分类器 SVM 的函数 我想用几个数据集来测试它 我有一个 2 核工作站 所以我想并行运行测试 有人可以向我解释一下以下之间的区别 dataset array dataset1 datas
  • iOS 将 URL 中的音频分成帧

    我正在 iOS 上开发一个简单的网络广播应用程序 具有非常简单的语音 音乐识别功能 主要思想是一个收音机 它播放来自 url 的信号 同时检查正在广播的信号类型 当它检测到语音时 它会改变频道等等 我使用 Storyboards 和 AVF
  • Matlab:不正确的索引矩阵参考(或智胜matlab)

    我希望能够写jasmine http pivotal github io jasmine 类似于 Matlab 中的测试 所以像 expect myfibonacci 0 toBe 0 expect myfibonacci 5 toBe 1
  • 将数字缩放为 <= 255?

    我的单元格的数值可以是 0 到 0 之间的任何值Integer MAX VALUE 我想对这些单元格进行相应的颜色编码 如果该值 0 则 r 0 如果该值是Integer MAX VALUE 则 r 255 但是中间的值呢 我想我需要一个函
  • 如何旋转矢量?

    如果我有 1 0 我旋转它90 degrees 1 2PI radians 我应该得到 0 1 我该如何实现这一目标 我在看这一页 http en wikipedia org wiki Rotation matrix并实现了这个 var r
  • 计算向量中连续 1 和 0 的数量

    在 Matlab 中我有一个如下所示的向量 0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 1 我现在要做的是统计这个向量中1的个数 连续的 1 算作 1 此外 我还想计算 1 之间 0 的平均值和中
  • 当 MATLAB 发生错误时如何继续循环?

    我正在使用函数将一些 dat 文件转换为 mat 文件 我在循环内调用此函数来转换多个文件 在某些情况下 我的 dat 文件已损坏 函数无法转换并发生错误 从而停止循环 现在我的问题是 是否有任何命令 当错误发生时 它应该跳过循环中的当前
  • Matlab,如何获取imagesc生成的结果?

    我读过一些类似的文章 但它们不是我想要的 得到imagesc之后的矩阵 https stackoverflow com questions 14364239 get the matrix after imagesc 14364434 143
  • MATLAB 黑洞变量

    MATLAB 是否有 黑洞 或丢弃变量 假设我正在做类似的事情 rows cols size A 但我不想存储行 是否有一个 黑洞 变量可以让我发送值去死 所以任务就像 BLACKHOLE cols size A 其中 BLACKHOLE
  • 如何在matlab中显示图像上的点?

    我有一些像素点 比如 p1 1 1 和 p2 1 10 等等 我想以任何颜色在图像上显示这些点 这个怎么做 MATLAB plot http www mathworks com help techdoc ref plot html文档非常全
  • 我的 matlab 图中需要不同的颜色

    这是我的情节代码 问题是我的图中的两条线具有相同的颜色 我需要为图中的每条线 总共 4 条线 分配一个特殊的颜色 for i 1 nFolderContents data hdrload folderContents i if size f
  • 如何将一个数表示为4个素数之和?

    这是问题所在 四个素数的和 http acm uva es p v101 10168 html 指出 输入的每一行包含一个整数 N N 输入示例 24 36 46 示例输出 3 11 3 73 7 13 1311 11 17 7 我第一眼就
  • 使用 lsqcurvefit 进行拟合

    我想将一些数据拟合到洛伦兹函数 但当我使用不同数量级的参数时 我发现拟合存在问题 这是我的洛伦兹函数 function value lorentz x x0 gamma amp value amp gamma 2 x x0 2 gamma
  • 查找椭圆或贝塞尔曲线上的等距点

    目前我正在编写 JavaScript 代码 将对象放置在屏幕上的椭圆上 我试图找到能够解决这个问题之一的算法 椭圆将是完美的 但如果它太昂贵 贝塞尔曲线也可以 抱歉 但不幸的是我的数学不允许我使用我找到的答案 https mathoverf
  • 笛卡尔坐标到极坐标

    看一下这里的例子 http www brianhare com physicals so html http www brianhare com physics so html 看一下 console log 我在其中使用了这两个主要函数
  • 有没有办法为数据表绘制UMAP或t-SNE图?

    我有一个巨大的文件 下面是一小部分数据 如下所示 我想绘制一个 PCA 我可以使用 PCA 函数绘制 PCA 但它看起来有点乱 因为我有 200 列 所以我想也许 t SNE 或 UMAP 效果更好 但我无法使用它们进行绘图 我想在图中显示
  • 求分数 a/b 的小数点后第 k 位,其中 a、b、k 是非常大的整数(小于 10e18)

    我的任务是找到分数 a b 小数点后第 k 位的数字 昨天我发现了这个算法 为了获取小数点后的任何数字 我生成一个名为 rem 的变量并进行循环 for int i 1 i lt k 1 i rem a b a rem 10 cout lt
  • MATLAB 中元胞数组的左连接

    I ve 2 cellMATLAB 中的数组 例如 A jim 4 paul 5 sean 5 rose 1 第二个 B jim paul george bill sean rose 我想做一个 SQL 左连接 这样我就可以得到 B 中的所
  • 如何在Matlab脚本中将泰勒级数系数存储到数组中

    这个问题是在 m 脚本的上下文中 我知道如何获取函数的泰勒级数 但我没有看到任何命令允许将级数的系数存储到数组中 sym2poly似乎不起作用 如何将系数存储到数组中 例如这个函数 syms x f 1 x 2 4 x 9 我们怎样才能得到
  • CSS Hex 到速记十六进制转换

    将十六进制转换为速记十六进制的正确算法是什么 例如 996633很容易被转换为 963 但如果是这样怎么办 F362C3 我的第一个猜测是我只取每种颜色的第一个值并使用它 所以 F362C3变成 F6C 但我不知道如何从数学上证明这种方法的

随机推荐

  • 辛普森悖论及贝叶斯解释

    辛普森悖论 Simpson s Paradox 亦有人译为辛普森诡论 为英国统计学家E H 辛普森 E H Simpson 于1951年提出的悖论 即在某个条件下的两组数据 分别讨论时都会满足某种性质 可是一旦合并考虑 却可能导致相反的结论
  • leetcode 63. 不同路径 II

    一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 现在考虑网格中有障碍物 那么从左上角到右下角将会有多少条不同的路径
  • ReactNative系列之四十八屏幕宽高

    有几种方式可以获取屏幕 依次来对比下 1 view gt onLayout measure 如果view是flex 1 则获取的为屏幕真正的可显示宽高 即全面屏含刘海高度 安全区模式不含刘海高度 实际 2 Dimens 监听change 在
  • 【实现一套爬虫数据抓取平台】[3-5-03] 微博长短地址转换

    文章目录 零 系列目录 一 背景 二 代码 三 总结 零 系列目录 写这套文章的时候 不会完全按照目录的顺序一篇一篇写 大家可以到目录中直接找到对应的章节进行查看 点我跳转 一 背景 新浪微博有两类地址 分别是 pc站地址 https we
  • VSCode配置C++开发环境:OpenCV

    文章目录 Linux 编译 调试 配置OpenCV Win10 编译调试 配置OpenCV 参考 最近在做深度学习的C 部署相关工作 于是写下这篇文档记录环境配置的过程 环境配置是一项非常繁琐的工作 无论从大学做相关作业还是到工作上 做这项
  • ORACLE中通过SQL语句(alter table)来增加、删除、修改字段

    ORACLE中通过SQL语句 alter table 来增加 删除 修改字段 1 添加字段 alter table 表名 add 字段 字段类型 default 输入默认值 null not null 2 添加备注 comment on c
  • Git合并代码流程——2023.05

    本文介绍一下如何将git上面的代码合并 一 把分支代码合并到master 首先切换到分支hello git checkout hello 使用git pull 把分支代码pull下来 git pull 切换到主分支 git checkout
  • 【收藏】开发人员看过来:11 个免费的开源 IDE

    1 Komodo Edit Windows Mac Linux Komodo Edit 是开源的 支持PHP Python Ruby JavaScript Perl Tcl XML HTML 5 and CSS 3 它具备语法着色 折叠 背
  • SSTI-2 继承关系 & 魔术方法

    主要内容学习自 B站 重庆橙子科技 SSTI 模板注入 我力推橙子科技的所有 CTF 课程 由于在模板注入时 我们能够注入的地方 终究只是一个变量 而不是 Python 语句 所以直接注入 Python 语句是不能执行的 需要一些特殊操作让
  • training set, validation set, test set的区别

    首先安利一下一个机器学习的入门在线课程 台湾大学机器学习 以及关于上面这个问题的一个解答 解答 大四做毕设的时候就有这个问题 当时没想明白 后面一直疑惑不解 直到今天才搞懂 首先写一下结论 training set 用来训练模型 valid
  • idea通过wsdl文件自动生成webservice客户端java代码

    今天做项目要从门户后台调用一个webservice接口获取角色对应的菜单列表 门户提供一个wsdl的url 之前没调过webservice接口 因为知道可以根据wsdl链接自动生成客户端代码 网上搜了一下 可以用idea自动生成 就试了一下
  • ssh放行端口_ssh 连接需要开放哪些端口

    目前的iptables如附 A OUTPUT o lo j ACCEPT A OUTPUT m state state RELATED ESTABLISHED j ACCEPT A OUTPUT m state state INVALID
  • 如何用Microsoft Office Visio画时序图

    文件 新建 软件和数据库 UML模型图 然后在左侧的形状中点击 UML序列
  • 爬取全国各地区汽车销量情况并用中国地图可视化展示

    爬取全国各地区汽车销量情况并用中国地图可视化展示 项目介绍 网页详情 代码 爬取数据代码 将爬取的数据保存到文档中 中国地图可视化 运行效果 项目介绍 爬取2017年全国各省份的汽车销量情况 由于数据源的问题 不包含台湾省的数据情况 并且利
  • dedecms sql批量导入文章

    dede addonarticle 附加文章表 dede archives 文档主表 dede arctiny 文档微 sql 直接存入文章 INSERT INTO dede archives id typeid typeid2 sortr
  • sql查询无结果返回空_Java Mybaties In查询无法返回结果映射对象

    问题描述 在Springboot mybaties mapper xml下 使用in查询参数由Java后台拼接字符串而来 执行查询后 Java后台收到的响应结果为null 但是将sql放至数据库查询时 发现能查到数据 列表未完全展示 最终效
  • 【刷题笔记4】LeetCode 82. 删除排序链表中的重复元素 II (链表处理经典题目)

    系列索引 刷题笔记0 系列目录索引 持续更新 推荐收藏 本题题目 LeetCode 82 删除排序链表中的重复元素 II 分类 链表 难度 中等 老规矩 先上AC图 题目 82 删除排序链表中的重复元素 II 点击直达原网站 示例 1 输入
  • js删除服务器上文件,js删除服务器文件

    js删除服务器文件 内容精选 换一换 目标服务器已安装操作系统 并且处于联网状态 目标服务器已安装鲲鹏编译插件 保护组生产站点服务器为SUSE操作系统 对该云服务器开启容灾保护后 执行切换操作 云服务器EIP无法ping通 执行切换操作后
  • ASP.NET立即上手教程(2)

    什么是asp net的Web Forms Asp net Web Forms 页面框架是可升级的通用语言运行时刻 CLR 程序模型 用来在服务器端动态生成WEB页面 美国人说话就是别扭 其实Web Forms就是asp net编写的页面 作
  • 本征正交分解(POD)入门(详解)

    思来想去还是把题目从 简介 改成了 入门 详解 其实详解主要就是针对可能没接触过矩阵论的同学 我也是研一才学的 入门是指的我会解释一些名词 方便理解 另外PCA 主成分分析 本质上就是POD 只是我最近翻的热工学论文大部分都用的POD这个名