首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习——L1约束的Huber损失下的鲁棒学习

之前介绍了,使用Huber损失函数可以实现鲁棒学习,相当于L1约束和L2约束的一个组合。在实现的过程中,Huber损失最小化学习的解是通过加权最小二乘学习法的反复迭代求得的,Huber学习法有一个缺点就是其权重即使对于大的残差也不会变为零。

我们之前也介绍过,L1约束的最小二乘学习的解是通过一般化L2约束的最小二乘学习的反复迭代而求得的。也就是说,Huber学习和L2约束的最小二乘学习的求解方法都是最小二乘法的反复迭代。因此,把它们优化组合在一起,可以得到更好的效果。代码如下:

clear; closeall; clc;

n = 50;% 训练样本个数

N = 1000;% 测试样本个数

x = linspace(-3,3,n)';

X = linspace(-3,3,N)';

pix = pi*x;

y = sin(pix)./pix + 0.1*x + 0.2*randn(n,1);% 拟合的函数

x2 = x.^2;

X2 = X.^2;

hh = 2*0.3^2;

l = 0.1;

e = 0.1;

t0 = rand(n,1);

x2 = x.^2;

k = exp(-(repmat(x2,1,n) + repmat(x2',n,1) - 2*x*x')/hh);

foro = 1:1000

r = abs(k*t0 - y);% 残差

w = ones(n,1);

w(r>e) = e./r(r>e);

Z = k*(repmat(w,1,n).*k) + l*pinv(diag(abs(t0)));

t = (Z + 0.000001*eye(n))\(k*(w.*y));

ifnorm(t-t0)

break;

end

t0 = t;

end

K = exp(-(repmat(X2,1,n) + repmat(x2',N,1) - 2*X*x')/hh);

F = K*t;

lambda = 0.1;

tt = (k^2 + lambda*eye(n))\(k*y);

F2 = K*tt;

plot(X,F,'r-','linewidth',2);

hold on

plot(X,F2,'g-','linewidth',2);

plot(x,y,'bo','linewidth',2);

axis([-2.8,2.8,-0.7,1.7]);

legend('L_1 Consttrained Huber LS','L_2 Consttrained LS','Training Samples');

运行结果如下:

以上就是今天推送的内容,欢迎讨论。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180406G1ESSB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券