次梯度法matlab代码,实例:连续化次梯度法解 LASSO 问题
實(shí)例:連續(xù)化次梯度法解 LASSO 問題
我們將在此頁面中構(gòu)造一個 LASSO 問題
并且展示連續(xù)化次梯度方法在其中的應(yīng)用。
目錄
構(gòu)造LASSO優(yōu)化問題
設(shè)定隨機(jī)種子。clear;
seed = 97006855;
ss = RandStream('mt19937ar','Seed',seed);
RandStream.setGlobalStream(ss);
構(gòu)造 LASSO 優(yōu)化問題
生成隨機(jī)的矩陣 和向量 以使得 。第一次實(shí)驗(yàn),給定正則化系數(shù)為 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 優(yōu)化問題
固定步長為 。AA = A' * A;
L = eigs(AA, 1);
首先在更嚴(yán)格的停機(jī)準(zhǔn)則下進(jìn)行試驗(yàn),將收斂時得到的函數(shù)值作為真實(shí)的最優(yōu)值的參考 。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 重復(fù)實(shí)驗(yàn)。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);
結(jié)果可視化
可視化優(yōu)化過程:觀察目標(biāo)函數(shù)值隨迭代次數(shù)的變化。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');
結(jié)果分析
于固定正則化系數(shù) 和步長時不同,采取連續(xù)化策略之后,次梯度法在固定步長下收斂到了最小值。 注意到在 減小到 1e-2 之前,兩次優(yōu)化的過程是完全相同的 (圖像不重合而是平行是由于對應(yīng)的最小值不同),并且在每次 減小后,函數(shù)值都有迅速的下降。 最終在 次迭代左右最終收斂,比之采取相同的連續(xù)化策略的光滑化梯度法稍慢。
參考頁面
此頁面的源代碼請見: demo_cont.m。
版權(quán)聲明
此頁面為《最優(yōu)化:建模、算法與理論》、《最優(yōu)化計算方法》配套代碼。 代碼作者:文再文、劉浩洋、戶將,代碼整理與頁面制作:楊昊桐。
著作權(quán)所有 (C) 2020 文再文、劉浩洋、戶將
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的次梯度法matlab代码,实例:连续化次梯度法解 LASSO 问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php折半查找面试题,php 面试题(一
- 下一篇: 宫寒月经期间怎么调理