问题遇到的现象和发生背景
这里是我的 matlab 代码,cvx目标函数里有两个正则化参数tau1和tau2,我需要设置适当的tau1和tau2值让re1和re2 小于 0.2,我已经尝试了很多很多的值,包括用for循环去找,但仍然不能得到最佳的re1和re2的结果。有没有寻找合适参数的其他方法? 不胜感激! (相比于两个参数都不知道的情况,实际上我知道其中一个参数的最佳值,但是另一个参数怎么调都得不到较好的结果,还有啥好方法吗?比如蒙卡?不会用)
用代码块功能插入代码,请勿粘贴截图
clc;clear
m = 1024;
n = m;
ind_s = floor(m*0.05)
ind_c = ind_s;
x0 = zeros(n,1);
x10_spt = randperm(n);
x0(x10_spt(1:ind_c)) = randn(ind_c,1);
v0 = zeros(m,1);
v0_spt = randperm(m);
v0(v0_spt(1:ind_c)) = randn(ind_c,1);
Phi = 1/sqrt(m) * randn(m,n);
data = real(Phi * x0);
N = 200;
p = (1+data)/2;
s0 = rand(numel(data),N);
P = repmat(p,1,N);
s = P > s0;
s1 = sum(s,2);
s2 = s1/N;
edata = 2*s2-1;
y = edata + v0 ;
% these two parameters I need to tune, I have tried for loop, but can't get
% good results of re1 and re2
tau1=10;
tau2=0.05;
% Recovery via CVX
cvx_begin quiet
variable x(n) ;
variable v(m);
minimize 0.5*pow_pos(norm(y - Phi * x - v),2) + tau1 * norm(x,1) + tau2 * norm(v,1);
cvx_end
re1 = norm(x - x0, 2)/ norm(x0, 2);
re2 = norm(v - v0, 2)/ norm(v0, 2);
% need re1 and re2 < 0.2
re1
re2
我的解答思路和尝试过的方法
用for循环去找
我想要达到的结果
设置适当的tau1和tau2值让re1和re2 小于 0.2 (这个结果要求比较灵活,主要是这个调整的方法,有问题随时联系)