1

有谁知道如何使用 CVX 实现稀疏组套索,MATLAB 中的凸优化包?

我不知道如何将公式描述为 CVX 原型。

4

4 回答 4

3

我在这里找到了一些东西

我决定分享!!

于 2015-03-25T22:16:37.400 回答
1

你必须使用CVX吗?Inria 有一个名为Spams的稀疏建模包,用 Matlab、R 和 Python 编写。如果您想要一个组套索正则化器,请查看mexproximalFlat 下的近端工具箱中的文档。也有一些例子。我经常使用 python spams 包。

于 2015-03-29T06:06:40.010 回答
0

更正:两者都支持不同的组大小。来自nfs的示例通过使用附加约束来支持不同的组大小。)

有关nfs给出的示例,请参阅此网页:http : //ask.cvxr.com/t/formulating-sparse-group-lasso-in-cvx/793/4
但是此示例似乎不允许不同的组大小。您可以参考以下示例(使用的公式是Simon、Noah 和 Robert Tibshirani 中的 Eq.3。“标准化和组套索惩罚。” Statistica Sinica 22.3 (2012): 983。

% Refer to Eq. (3) in /Simon, Noah, and Robert Tibshirani. 
%    "Standardization and the group lasso penalty." 
%    Statistica Sinica 22.3 (2012): 983./

% Note that group LASSO allows different group sizes
N = 64; m = 3;   
rho = [2; 4; 6];  % group sizes
n = sum(rho); % num of total parameters
X = rand(N,n);   % X = [X1, X2, ..., X_m]
y = rand(N,1);
lambda = 1;

IndexM = [1, 2; 3, 6; 7, 12];  % indexes of elements in each group
cvx_begin
    % w = [beta1'; beta2'; ...; beta_m']
    variable w(n)    
    expression ws(m)
    for i = 1:m
        ws(i) = norm(w(IndexM(i,1):IndexM(i,2)),2);
    end

    minimize( norm(y-X*w, 2) +  lambda*(sqrt(rho)' * ws) )
cvx_end

% get beta_i, i.e. i-th beta corresponding to i-th group
% e.g. 
i = 2;
beta_i = w(IndexM(i,1):IndexM(i,2));
于 2017-02-21T15:49:25.477 回答
0

我相信 CVX 无法轻松处理 SGL 中的组范数,除非您对每个数据集的组范数进行硬编码。如果你使用 Matlab,你可以使用SLEP 工具箱

于 2018-03-15T16:46:58.880 回答