次梯度法matlab代碼,實例:連續化次梯度法解 LASSO 問題

實例:連續化次梯度法解 LASSO 問題

我們將在此頁面中構造一個 LASSO 問題

b5d6b80b170c66c2ae0a4bcd1df2d27e.png

并且展示連續化次梯度方法在其中的應用。

目錄

構造LASSO優化問題

設定隨機種子。clear;

seed = 97006855;

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

RandStream.setGlobalStream(ss);

構造 LASSO 優化問題

359134a9c671df43de98cfd9bf8ac0f6.png

生成隨機的矩陣 31b7a8539b32546a74734a949eb86565.png 和向量 238bf4184185194e982a6f4b2706601e.png 以使得 4d04bb98abf5b1b9441538279e378117.png。第一次實驗,給定正則化系數為 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 優化問題

固定步長為 b94ddf8d998ef6cd4692f77745639dc5.png。AA = A' * A;

L = eigs(AA, 1);

首先在更嚴格的停機準則下進行試驗,將收斂時得到的函數值作為真實的最優值的參考 d5a1c46e2f427b75fb9b6ac0525d57db.png。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);

a39f58ee769034fc073c423818a0440b.png 修改為 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');

20bd43171e31d7e350ce32f85047445e.png

結果分析

于固定正則化系數 a39f58ee769034fc073c423818a0440b.png 和步長時不同,采取連續化策略之后,次梯度法在固定步長下收斂到了最小值。 注意到在 a39f58ee769034fc073c423818a0440b.png 減小到 1e-2 之前,兩次優化的過程是完全相同的 (圖像不重合而是平行是由于對應的最小值不同),并且在每次 a39f58ee769034fc073c423818a0440b.png 減小后,函數值都有迅速的下降。 最終在 87443fe031d00ee1eb47a14e2961b8a9.png 次迭代左右最終收斂,比之采取相同的連續化策略的光滑化梯度法稍慢。

參考頁面

此頁面的源代碼請見: demo_cont.m。

版權聲明

此頁面為《最優化:建模、算法與理論》、《最優化計算方法》配套代碼。 代碼作者:文再文、劉浩洋、戶將,代碼整理與頁面制作:楊昊桐。

著作權所有 (C) 2020 文再文、劉浩洋、戶將

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382968.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php變量使用,php變量的使用

來源:www.cncfan.com | 2006-1-11 | (有1856人讀過)就像大部份的結構化程序,有所謂的全局變量與局部變量,PHP 在這方面也是有相似之處。在 PHP 的程序執行時,系統會在內存中保留一塊全局變量的區域。實際運用時,可以透過 $GLOBALS…

php syncml 協議,基于改進的SyncML協議的圖像安全同步技術研究

Image secure synchronization technology research based on improved SyncML protocolJIA Zhaolong1賈兆攏(1991-),女,北京郵電大學碩士生,主要研究方向:網絡安全技術與應用MA Zhaofeng2馬兆豐(1974-),男&#xff0c…

php 文字水印如何居中,php文字水印和php圖片水印實現代碼(二種加水印方法)

$dst_path dst.jpg;$src_path src.jpg;//創建圖片的實例$dst imagecreatefromstring(file_get_contents($dst_path));$src imagecreatefromstring(file_get_contents($src_path));//獲取水印圖片的寬高list($src_w, $src_h) getimagesize($src_path);//將水印圖片復制到目…

qq ip探測儀 php,巧用Win7資源監視器,查看QQ好友IP

用QQ時間比較長、喜歡DIY的朋友都知道,有一些第三方版本的QQ或者插件可以顯示好友IP地址,但其實在Windows7中根本用不著第三方軟件,在系統自帶的資源監視器中,就能很方便的看到QQ好友的IP地址。首先,打開“任務管理器”…

oracle安裝顯示注冊表,windows下oracle 11g r2 安裝過程與卸載詳細圖解

Oracle 11g安裝1.解壓下載的包,然后進入包內,點擊setup.exe開始安裝 。2.出現如下:一般把那個小對勾取消,點擊下一步進行,彈出下圖這個后點‘是3.下圖后,選擇創建和配置數據庫,點擊下一步。4.下…

oracle+連接格式,oracle外連接符號(+)的用法

我們都知道,PL/SQL中實現外連接,除了可以用關鍵詞OUTER JOIN外,還可以用Oracle的外連接符號()。對于這個外連接符號(),雖然看到書上說:使用()進行外連接時,where條件中,對于附表的字段都應帶上(…

php一行多個商品,【后端開發】php一行展示多個商品怎么實現

php一行展示多個商品怎么實現php可以用來連接數據庫查詢商品,并輸出展示給用戶,但想要實現一行展示多個商品需要用到css技術,具體實現如下:1、首先php代碼$sql "select * from user";$result $conn->query($sql);i…

linux設置時間快1小時,LINUX CentOS系統時間與現在時間相差8小時解決方法

GPS 系統中有兩種時間區分,一為UTC,另一為LT(地方時)兩者的區別為時區不同,UTC就是0時區的時間,地方時為本地時間,如北京為早上八點(東八區),UTC時間就為零點,時間比北京時晚八小時,…

linux雙網卡端口聚合,Linux雙網卡聚合改造

Linux雙網卡聚合改造一、環境和需求Linux主機只有一塊網卡接到交換機上,為了消除交換機的單點,新增一臺交換機,Linux主機端新接一塊網卡到新交換機上,對這兩塊網卡做聚合達到目的。二、物理連線使用網線連接新增交換機和新網卡三、…

linux服務器無法識別xml文件,linux上重啟服務器提示找不到smartbi-config.xml文件

(本文檔僅供參考)問題服務器上重啟服務時,報了如下錯誤信息:(備注:因安全考慮,新版本的config登錄界面已經不展示config文件的加載路徑了。)解決方案原因一:這是一個關于在哪個路徑下啟動smartbi服務的問題。首先&…

linux uname命令詳解,linux中uname命令參數及用法詳解

uname 命令可用于大多數 UNIX 和類 UNIX 系統以及 Linux。功能說明:uname用來獲取電腦和操作系統的相關信息。語  法:uname [-amnrsvpio][--help][--version]補充說明:uname可顯示linux主機所用的操作系統的版本、硬件的名稱等基本信息。參…

android linux網絡連接,Android和Linux服務器之間的TCP連接

我正在編寫一個代碼,需要每秒從Android移動設備向臺式計算機(linux服務器)發送數據。由于數據經常發送,通過Http命中無法實現(因為會消耗時間),所以Tcp通信似乎是更好的選擇,因為android手機的數據可以通過此套接字編程快速發送。…

linux堆上的內存可執行嗎,pwn的藝術淺談(二):linux堆相關

這是linux pwn系列的第二篇文章,前面一篇文章我們已經介紹了棧的基本結構和棧溢出的利用方式,堆漏洞的成因和利用方法與棧比起來更加復雜,為此,我們這篇文章以shellphish的how2heap為例,主要介紹linux堆的相關數據結構…

arm嵌入式linux應用實例開發pdf,零點起步——ARM嵌入式Linux應用開發入門一書的源代碼...

代碼片段和文件信息屬性 大小 日期 時間 名稱----------- --------- ---------- ----- ----文件 24064 2016-03-20 09:49 零點起步——ARM嵌入式Linux應用開發入門\習題答案 (1).doc文件 24064 2016-03-20 09:50 零點起步——ARM嵌入式Lin…

linux上p圖工具,linux圖片處理工具GraphicsMagick安裝使用

安裝依賴包:yum install libpng libjpeg freetype libpng-devel libjpeg-devel libtool-ltdl-devel libtool-ltdl官網下載GraphicsMagick包官網地址:http://www.graphicsmagick.org/解壓編譯安裝:tar xf GraphicsMagick-1.3.25.tar.gz./confi…

manjaro linux下載軟件,manjaro linux

manjaro linux下載。manjaro linux是基于Arch Linux開發的Linux操作系統!對于裸服務器、虛擬機、IaaS 和 PaaS 方面都得到了加強,而且內置了強大的數據中心滿足商業的各種要求,是強大的混合云平臺和物理系統!manjaro linux介紹man…

linux 安裝qt 4.6軟件,QT學習之一:Linux下安裝QT之版本qt-4.6.3

在Linux中分別安裝應用于不同平臺的QT:PC;嵌入式X86;ARM。這三者PC版、嵌入式X86版和ARM版的區別主要體現在:當configure時分別加了不同的參數,具體區別是:PC平臺:在linux中全安裝qt&#xff0c…

linux kill命令使用方法,Linux初學者的killall命令(8個例子)

Linux初學者的killall命令(8個例子)我們已經討論了kill命令 ,如果你想在Linux中終止進程,你可以使用kill命令 。 但是,還有一個命令行實用程序可以用于相同的目的: killall 。 在本教程中,我們將使用一些易于理解的示例…

linux wait 信號丟失,wait函數族和SIGCHLD信號的關系

一、wait()和waitpid()函數的區別pid_t wait(int *status)進程一旦調用了wait,就立即阻塞自己,由wait自動分析是否當前進程的某個子進程已經退出,如果讓它找到了這樣一個已經變成僵尸的子進程, wait就會收集這個子進程的信息&…

linux socket接收不到16進制數據,C下通過socket收發十六進制數據解決辦法

C下通過socket收發十六進制數據系統是在LINUX下,下位機發送十六進制數據過來 上位機怎么解析 把數據以十六進制的形式顯示出來,發送十六進制又如何實現------解決方案--------------------socket不就是發16進制的么------解決方案--------------------那…