当前位置: 首页 > news >正文

TwIST算法MALTLAB主程序详解

TwIST算法MALTLAB主程序详解

关于TwIST算法的具体原理可以参考:
链接: https://ieeexplore.ieee.org/abstract/document/4358846
链接: https://blog.csdn.net/jbb0523/article/details/52193209

该算法的MATLAB源代码:
链接: http://www.lx.it.pt/~bioucas/TwIST/TwIST.htm

1. 函数定义与输入输出变量

主函数的定义如下所示,TwIST包含7个输出变量和若干个输入变量,其中包含3个必需输入变量和若干个可选输入变量(varargin)。具体每个变量的含义可以参考MATLAB TwIST.m文件中的解释。下文仅对一些关键参数进行解释。

function [x,x_debias,objective,times,debias_start,mses,max_svd] = ...TwIST(y,A,tau,varargin)

该算法主要解决如下正则化问题:

arg min_x = 0.5*|| y - A x ||_2^2 + tau phi( x )

也就是论文中式(1)所示,注意在MATLAB代码中存在一些符号表示的改变。如K➡A,λ➡tau等。
在这里插入图片描述

其具体的迭代公式如原论文中式(17)-(19)所示
在这里插入图片描述
从式(17)-(19)中看,我们需要 x 0 , α , β , y , K , Ψ λ x_{0},\alpha,\beta,y,K,\Psi_{\lambda} x0,α,β,y,K,Ψλ等一系列参数,上述迭代公式方可正确运行。针对算法,输出变量中x即为目标的估计值,x_debias为目标估计值的去偏结果,获得这一结果往往需要在主循环迭代结束后,通过适当的去偏迭代,消除正则化器造成的一些偏差。

输入变量含义
y测量结果,可以为1为向量或者二维数组
A对应原论文中的K
tau正则化参数,对应原论文中的λ
Psi去噪函数句柄,对应原论文中的去噪函数ψ
Phi正则化器的函数句柄,对应原论文中的Φ
lambdaTwIST算法的lam1参数,对应原论文中的 λ 1 \lambda_{1} λ1参数,论文中的 λ N \lambda_{N} λN在程序中被设置为常数1
alphaTwIST的alpha参数 (详见论文式 (22))
betaTwIST的beta参数 (详见论文式 (23))

2.算法主要步骤

TwIST.m的代码很长,但主要包含的内容并不多。下文主要对在代码中关键部分进行解释。按照从前往后的顺序,主要包含了以下几个内容:

(1)变量注释。

这一部分对函数的每一个变量都进行了注释,包括必须变量和可选变量。建议按照以上迭代公式了解关键参数的含义。

(2)变量设定。

这一部分主要在变量注释和初始化两部分之间。
主要定义了

  • 各个变量的默认值。
  • 使用一个switch-case分支语句读取varargin所代表的可选输入参数,实现可选变量的自定义功能。
  • 对主要变量,如alpha和beta进行设定。对于这个部分,多说一点。如原论文中所示

在这里插入图片描述
在这里插入图片描述

实际上存在如下关系:

0 < ξ 1 ≤ λ 1 < λ N ≤ ξ m , ξ ‾ m ≡ m a x ( 1 , ξ m ) 0< \xi_{1} ≤ \lambda_{1} < \lambda_{N} ≤ \xi_{m} , \overline{\xi}_{m}≡max(1,\xi_{m}) 0<ξ1λ1<λNξm,ξmmax(1,ξm)
而在程序中,作者直接用 λ 1 \lambda_{1} λ1表示了 ξ 1 \xi_{1} ξ1,同时设定 ξ m \xi_{m} ξm λ N = 1 \lambda_{N}=1 λN=1。虽然可能有点误差,不过我觉得无可厚非。

关于函数句柄,需要注意的是x在这里并不是只迭代的解x,而是一个指代未知变量的参数,如下面的AT(y)中的y。

if ~isa(A, 'function_handle')AT = @(x) A'*x;A = @(x) A*x;
endAty = AT(y);

(3)初始化。

初始化主要实现了 x 0 x_{0} x0的设置方法,验证了phi(x)和psi(x)函数是否有效,以及其他一些变量的初始设置。

(4)TwIST主循环迭代。

这一部分是整个代码中最主要的部分。

TwIST算法的迭代包含两个主要部分:TwIST迭代和IST迭代。IST_iters和TwIST_iters的值用于确定当前应该执行哪一种迭代。根据条件判断,当TwIST_iters达到特定阈值或满足特定条件时,会切换到执行IST迭代,而不是继续TwIST迭代;反之亦然。

这一部分主要包含2个while循环,两个while循环会一直运行,直到满足对应条件。

在第二个while循环中有一个 if-else结构,用于判断进行何种操作。在TwIST循环中,IST_iters和TwIST_iters并不会一直增加,而只是一个判断flag,结合对应的if else,完成判断。迭代次数的增加实际上由iter控制。

建议在主循环设置断点,并将IST_iters和TwIST_iters后边的分号去掉,使用demo进行调试。观察IST_iters和TwIST_iters的值变化。这样,IST_iters和TwIST_iters取什么值执行什么语句就一清二楚了。

去噪函数的作用

此外,在主循环中,还有一行比较重要。它解决了这样一个问题:原论文中的迭代公式中并没有psi去噪函数这样一个变量,那它在程序中到底起到了什么作用呢?

x = psi_function(xm1 + grad/max_svd,tau/max_svd);

代码中其他位置的psi_function只是传参或者验证,而该位置的psi_function是起到了实质作用的。psi_function主要用于执行阈值或收缩操作,通常涉及对给定向量或信号进行阈值处理。它可能采用软阈值(soft thresholding)或硬阈值(hard thresholding)等技术,用于将信号的幅度调整为零或接近零,从而产生更稀疏的表示。

稀疏性操作

            if sparsemask = (x ~= 0);xm1 = xm1.* mask;xm2 = xm2.* mask;end

以上代码是处理稀疏性的操作。当 sparse 变量为真时(即 sparse 变量为非零值),代码会执行以下操作:

  • 首先,创建一个逻辑掩码 mask,该掩码用于标识变量 x 中非零元素的位置。也就是说,mask 的元素为 1 表示对应 x 中的元素不为零,为 0 表示对应 x 中的元素为零。
  • 然后,通过将 xm1 和 xm2 分别与 mask 相乘,将 xm1 和 xm2 中对应于 x 中零元素位置的部分置为零。
  • 这样可以确保在算法的迭代过程中,对 x 的更新仅在非零位置进行,以保持其稀疏性。

(5)去偏。

在主循环之后,还有一个去偏阶段(debias phase)。这是一个可选操作,作者给出的解释是 :

If the ‘Debias’ option is set to 1, we try to remove the bias from the l1 penalty, by applying CG to the least-squares problem obtained by omitting the l1 term and fixing the zero coefficients at zero.

可见,这一部分主要是为了消除l1惩罚的偏差。

相关文章:

TwIST算法MALTLAB主程序详解

TwIST算法MALTLAB主程序详解 关于TwIST算法的具体原理可以参考&#xff1a; 链接: https://ieeexplore.ieee.org/abstract/document/4358846 链接: https://blog.csdn.net/jbb0523/article/details/52193209 该算法的MATLAB源代码&#xff1a; 链接: http://www.lx.it.pt/~bi…...

Flutter 三: Dart

1 数据类型 数字(number) int double 字符串转换成 num int.parse(“1”) double.parse(“1”);double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为stringdouble 直接舍弃小数点后几位的数据 可使用字符串截取的方式 字符串(string) 单引号 双引号 三引号三引号 可以输…...

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端&#xff0c;EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法&#xff0c;FreeRedis和CsRedis算是近亲&#xff08;都是GitHub中账号为2881099下的开源项目&#xff09;&#xff0c;因此其用法特别相似。FreeRedis的主要…...

Postman接口测试(超详细整理)

常用的接口测试工具主要有以下几种 Postman&#xff1a;简单方便的接口调试工具&#xff0c;便于分享和协作。具有接口调试&#xff0c;接口集管理&#xff0c;环境配置&#xff0c;参数化&#xff0c;断言&#xff0c;批量执行&#xff0c;录制接口&#xff0c;Mock Server, …...

【深入解析spring cloud gateway】12 gateway参数调优与分析

本节主要对网关主要的一些参数做一些解释说明&#xff0c;并用压测工具测试一下网关的接口&#xff0c;通过压测来验证参数配置是否合理 一、连接池参数 参数示例 spring:application:name: gatewaycloud:gateway:# http连接设置httpclient:# 全局的响应超时时间&#xff0c…...

Java继承,父类没有无参构造方法时,子类必须要显式调用父类的构造方法

在Java中&#xff0c;如果一个类没有定义任何构造函数&#xff0c;那么编译器会默认为这个类提供一个无参的构造函数。 这个隐式的构造函数在继承的时候&#xff0c;子类会在自己的构造方法里面默认的调用这个构造函数。 但是&#xff0c;如果我们在父类中定义了一个有参构造…...

Ubuntu 20.04使用Livox Mid-360

参考文章&#xff1a; Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一&#xff1a;Livox mid 360驱动安装与测试 前言&#xff1a; Livox mid360需要使用Livox-SDK2&#xff0c;而非Livox-SDK&#xff0c;以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部…...

C语言之冒泡排序

其实排序有很多的方法&#xff0c;比如&#xff1a;冒泡排序&#xff0c;插入排序&#xff0c;快速排序&#xff0c;归并排序&#xff0c;选择排序等。今天来讲一下最简单的排序&#xff1a;冒泡排序。这种排序的方法效率极其低下。 假设有一个整型数组&#xff1a; int arr[…...

在Linux上安装NVM(Node Version Manager)

在Linux系统上&#xff0c;使用NVM&#xff08;Node Version Manager&#xff09;是管理和切换Node.js版本的一种便捷方式。以下是在Linux上安装NVM的步骤&#xff1a; 1. 下载并安装NVM 使用curl或wget下载并运行NVM的安装脚本。选择一种方式执行以下命令之一&#xff1a; …...

常用两种Linux命令生成器

在Linux中&#xff0c;可以使用多种命令来生成随机密码。以下是其中两种常用的命令&#xff1a; 1.pwgen&#xff1a;这个命令可以生成随机、无意义的但容易发音的密码。生成的密码可以只包含小写字母、大小写混合或数字。大写字母和数字会以一种便于记忆的方式放置&#xff0…...

【OAuth2】授权框架的四种授权方式详解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《OAuth 2》。&#x1f3af;&#x1f3af; &#x1…...

AI数字人不间断直播是什么?数字人直播带货如何搭建?

随着电商行业的崛起&#xff0c;数字人直播成为了最为热门的直播方式之一。数字人直播利用AI技术创建出的数字人进行直播&#xff0c;给观众带来了全新的视觉体验。 一、AI数字人无限播&#xff08;数字人SaaS系统VX&#xff1a;zhibo175&#xff09;是什么&#xff1f; AI数字…...

真菌基因组研究高分策略(二):比较基因组揭示寄主外生菌根真菌基因组的动态进化

在表征外生菌根&#xff08;ECM&#xff09;真菌的“共生工具包”方面的研究已经取得了重大进展&#xff0c;但宿主特异性如何被编码到ECM真菌基因组中仍知之甚少。2021年发表于《New Phytologist》期刊的文章对ECM真菌宿主特异性和通用性进行了比较基因组分析&#xff0c;重点…...

uni-app之HelloWorld实现

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…...

CVE-2023-49898 Apache incubator-streampark 远程命令执行漏洞

项目介绍 Apache Flink 和 Apache Spark 被广泛用作下一代大数据流计算引擎。基于大量优秀经验结合最佳实践&#xff0c;我们将任务部署和运行时参数提取到配置文件中。这样&#xff0c;带有开箱即用连接器的易于使用的 RuntimeContext 将带来更轻松、更高效的任务开发体验。它…...

即将来临的2024年,汽车战场再起波澜?

我们来简要概况一下11月主流车企的销量表现&#xff1a; 根据数据显示&#xff0c;11月吉利集团总销量29.32万辆&#xff0c;同比增长28%。这在当月国内主流车企中综合实力凌厉&#xff0c;可谓表现得体。而与吉利直接竞争的比亚迪&#xff0c;尽管数据未公布&#xff0c;但我们…...

Python 爬虫之下载视频(二)

爬取某Y的视频链接和标题 文章目录 爬取某Y的视频链接和标题前言一、基本思路二、程序解析阶段三、程序处理阶段总结 前言 这篇内容就简单给大家写个如何从网页上爬取某B主 主页 页面上所有的视频链接和视频标题。 这篇是基础好好看&#xff0c;下篇会根据这篇的结果做一个批…...

智能优化算法应用:基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子轨道搜索算法4.实验参数设定…...

[机器人-2]:开源MIT Min cheetah机械狗设计(二):机械结构设计

目录 1、四肢朝向的选择 2、电机布局形式的选择 3、电机的选型及测试&#xff08;非常重要&#xff09; 4、结构优化 5、尺寸效应 6、其他 1、四肢朝向的选择 机械狗的结构设计&#xff0c;第一个摆在我们面前的就说四肢的朝向问题&#xff0c;如下图&#xff0c;我们是…...

用友U8+CRM help2 任意文件读取漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 help2接口处存在任意文件读取漏洞&#xff0c;攻击者通过漏洞可以获取到服…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...