实例:连续化次梯度法解 LASSO 问题

我们将在此页面中构造一个 LASSO 问题

并且展示连续化次梯度方法在其中的应用。

目录

构造LASSO优化问题

设定随机种子。clear;

seed = 97006855;

ss = RandStream('mt19937ar','Seed',seed);

RandStream.setGlobalStream(ss);

构造 LASSO 优化问题

生成随机的矩阵 和向量 以使得 。第一次实验,给定正则化系数为 1e-3 。m = 512;

n = 1024;

A = randn(m, n);

u = sprandn(n, 1, 0.1);

b = A * u;

x0 = randn(n, 1);

mu = 1e-3;

求解 LASSO 优化问题

固定步长为 。AA = A' * A;

L = eigs(AA, 1);

首先在更严格的停机准则下进行试验,将收敛时得到的函数值作为真实的最优值的参考 。opts = struct();

opts.maxit = 5000;

opts.maxit_inn = 500;

opts.opts1 = struct();

opts.method = 'subgrad';

opts.opts1.step_type = 'diminishing';

opts.verbose = 0;

opts.alpha0 = 1/L;

opts.ftol = 1e-12;

opts.ftol0 = 1e4;

opts.etag = 1;

addpath('../LASSO_con')

[x, out] = LASSO_con(x0, A, b, mu, opts);

f_star = out.fvec(end);

求解 LASSO 问题,记录输出。opts.maxit = 3000;

opts.maxit_inn = 200;

opts.opts1.step_type = 'diminishing';

opts.verbose = 0;

opts.ftol = 1e-8;

[x, out] = LASSO_con(x0, A, b, mu, opts);

data1 = (out.fvec - f_star) / f_star;

k1 = length(data1);

修改为 1e-2 重复实验。mu = 1e-2;

opts.maxit = 5000;

opts.maxit_inn = 500;

opts.opts1.step_type = 'fixed';

opts.ftol = 1e-10;

[x, out] = LASSO_con(x0, A, b, mu, opts);

f_star = out.fvec(end);

opts.maxit = 3000;

opts.maxit_inn = 200;

opts.ftol = 1e-8;

opts.opts1.step_type = 'fixed';

[x, out] = LASSO_con(x0, A, b, mu, opts);

data2 = (out.fvec - f_star) / f_star;

k2 = length(data2);

结果可视化

可视化优化过程:观察目标函数值随迭代次数的变化。fig = figure;

semilogy(1:k1, max(data1,0), '-', 'Color',[0.2 0.1 0.99], 'LineWidth',2);

hold on

semilogy(1:k2, max(data2,0), '-.','Color',[0.99 0.1 0.2], 'LineWidth',1.5);

legend('\mu = 10^{-3}', '\mu = 10^{-2}');

ylabel('$(f(x^k) - f^*)/f^*$', 'fontsize', 14, 'interpreter', 'latex');

xlabel('迭代步');

print(fig, '-depsc','subgrad.eps');

结果分析

于固定正则化系数 和步长时不同,采取连续化策略之后,次梯度法在固定步长下收敛到了最小值。 注意到在 减小到 1e-2 之前,两次优化的过程是完全相同的 (图像不重合而是平行是由于对应的最小值不同),并且在每次 减小后,函数值都有迅速的下降。 最终在 次迭代左右最终收敛,比之采取相同的连续化策略的光滑化梯度法稍慢。

参考页面

此页面的源代码请见: demo_cont.m。

版权声明

此页面为《最优化:建模、算法与理论》、《最优化计算方法》配套代码。 代码作者:文再文、刘浩洋、户将,代码整理与页面制作:杨昊桐。

著作权所有 (C) 2020 文再文、刘浩洋、户将

次梯度法matlab代码,实例:连续化次梯度法解 LASSO 问题相关推荐

  1. 粒子群算法matlab代码实例使用与参数解读(二维数据)

    粒子群算法与matlab代码实例使用 粒子群算法介绍 粒子群算法使用场景 粒子群的优缺点 实例编程分析 代码分析 参数分析 更多应用场景 在网络中有很多的博客都已经粒子群算法的算法本质讲解的非常清晰明 ...

  2. java oracle数据库连接代码,java连接oracle数据库代码实例(注释详解)

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  3. 对偶上升实例-MATLAB代码

    一.本文概述: 本文给出对偶上升法(dual ascent)求解凸优化问题最优解的代码实例.如果您觉得对您有帮助,请点个赞,加个收藏,谢谢! 二.简单实例 本文以下述实例为例,撰写对偶上升法的迭代步骤 ...

  4. 基于FastICA的声源分离实例(matlab代码)

    基于FastICA的声源分离实例 1 独立成分分析(ICA)的形象化理解 1.1 盲源分离(BlindSource Separation,BSS)的认识 1.2 独立成分分析(ICA)的基础概念 1. ...

  5. 多激光雷达外参⾃动化标定算法及代码实例

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 激光雷达是⽬前⾃动驾驶系统中的核⼼传感器之⼀,但是由于其信息密度低.存在垂直盲区等问题,⼚商⼤多在其L ...

  6. MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)

    前言 NSGA-Ⅱ是最流行的多目标遗传算法之一,它降低了非劣排序遗传算法的复杂性,具有运行速度快,解集的收敛性好的优点,成为其他多目标优化算法性能的基准. NSGA-Ⅱ算法是 Srinivas 和 D ...

  7. MATLAB粒子群算法求解带充电站(桩)的电动车辆路径规划EVRP问题代码实例

    MATLAB粒子群算法求解带充电站(桩)的电动车辆路径规划EVRP问题代码实例 问题实例描述: 现有一个配送中心需要向20个客户点进行送货.每个客户点有不同货物需求量和卸货服务时间.配送中心和客户点的 ...

  8. 《MATLAB图像处理实例详解》:学习第六天(2022.10.09)

    4.2.3 图像的缩放 MATLAB 图像处理工具箱中提供了函数imresize( )进行图像的缩放操作,其具体的调用格式如下: B=imresize(A, m):该函数返回缩放后的图像B:A为要进行 ...

  9. Swift 中的 async/await ——代码实例详解

    前言 async-await 是在 WWDC 2021 期间的 Swift 5.5 中的结构化并发变化的一部分.Swift 中的并发性意味着允许多段代码同时运行.这是一个非常简化的描述,但它应该让你知 ...

最新文章

  1. c#初学-索引器get和set的使用(泛型类)
  2. Gulp:自动化构建工具
  3. Java当中的HashSet
  4. tf.train.Saver
  5. android 9.0 https 适配,如何适配 Android 9.0? 在 Android 9.0 上发生 SSL handshake timed out 异常怎么解决...
  6. 聚合函数查询 group by having
  7. cocos2d JS 鼠标响应事件
  8. POJ 1155 TELE 树形DP
  9. 怎么卸载php xshell,xftp5如何卸载?xshell5卸载不了怎么办?
  10. 计算机系统备份教案,系统备份教案推荐.doc
  11. Wolf从零学编程-用Python打造简单加密程序(一)
  12. java 正则拼音,用于匹配拼音的正则表达式
  13. WLAN和WIFI区别以及组网方式
  14. 全国大学的ftp及部分免费ftp地址
  15. Tesseract-OCR 4.0LSTM训练流程 (Windows环境下)
  16. 微信小程序手把手入门教程
  17. 软件项目的规模、工作量和成本是如何进行估算的
  18. 九个Web开发者必备的软技能
  19. 拼多多api接口应用示例
  20. 16-kubernetes集群中ceph集群使用

热门文章

  1. Leetcode 648.单词替换
  2. luogu P2516 [HAOI2010]最长公共子序列
  3. python——成语接龙小游戏
  4. (四)Qt实现自定义模型基于QAbstractTableModel (一般)
  5. 【Unity】Update()和FixedUpdate()
  6. POJ2251Dungeon Master
  7. 开始python之旅
  8. python各种语言间时间的转化
  9. 修改窗口图标 AfxRegisterWndClass()
  10. c 给定字符串中查找_面试 | 查找类算法精析