(单纯性和L1 ball)投影梯度法

投影梯度方法

Efficient Projections onto the ℓ1-Ball for Learning in High Dimensions[2008]
高维数据的有效投影

文章给出了求解:
1.投影到单纯形
2.投影到L1-ball的算法。
下图只给出了复杂度为O(nlogn)的算法,关于算法复杂度为O(n)的算法,请参考文章后面的详细内容。

下面是matlab代码参考

代码1

function [ projy ] = proj_unitSimplex( y )
%See "Fast Projection onto the Simplex and the ?1 Ball", Laurent Condat, 2015
%投影 到 单位单纯形
projy =  max(y-max((cumsum(sort(y,1,'descend'),1)-1)./(1:size(y,1))'),0);
end

代码2

% 测试
clearvars;clc;
z=1;
%v=[4 4]';
v=[-0.5 1]';
w=proj2_L1ball0(v,z);
%真实的结果应该为:
% y=x; 与x+y=1,两条之间的交点,即点:(0.5,0.5)
function w=proj2_L1ball0(v,z)
% 函数的功能: 将高维空间点v投影到||w||_1 \leq z的ball中,即在ball中找到一个点与点v之间的欧式距离最小。
% input:
%       v:待投影的矢量(点)
%       z:L1 ball的约束
% output:
%       w:投影后的矢量(点)
% 说明:其中点或者矢量都以列矢量的形式出现
n=length(v);
if norm(v,1)<=z
    w=v;
else
    u=abs(v);
    su=sort(u,1,'descend');
    j=1;
    while  true
        if su(j)-(sum(su(1:j),1)-z)/j<0
            j=j-1;
            break;
        end
        if j==n
            break;
        end
        j=j+1;
    end
    theta=1/j*(sum(su(1:j),1)-z);
    w=bsxfun(@times,sign(v),max(u-theta,0));
end
end

从投影结果可以看出,很容易得到稀疏形式的解。
例子:L1 ball 外的点 投影
上图给出了三个投影的实例,不在||w||1<1范围内的点的投影均落在边界上,并且从上面点的投影来看,我们很容易求解出稀疏的解。

下面是论文中介绍的 将原目标函数向单纯性或者L1 ball 投影的原理。

参考原文

原文章:
1.Efficient Projections onto the ℓ1-Ball for Learning in High Dimensions[2008]

原博文:
https://blog.csdn.net/raby_gyl/article/details/53190845

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值