虽然最小二乘学习法师非常实用的机器学习方法,但是当训练样本中包含异常值的时候,学习效果非常易于受到影响。效果如下:
这里我们引入了Huber损失函数,Huber loss是为了增强平方误差损失函数(squared loss function)对噪声(或叫离群点,outliers)的鲁棒性提出的。其定义如下:
该函数的图像如下:
当a的值较小时,该函数为二次函数,当a的值较大时,该函数为线性函数, 当|a| = delta时两函数具有相等的值和不同的斜率。变量a通常是指残差,即观测值和预测值之间的差值a = y - f(x)。所以上面的式子可以被扩展为:
然后我们使用L1约束LS中使用的方法,使用L2控制L1,代码如下:
clear; closeall; clc;
n = 10;% 训练样本个数
N = 1000;% 测试样本个数
x = linspace(-3,3,n)';
X = linspace(-4,4,N)';
y = x + 0.2*randn(n,1);% 拟合的函数
y(n) = -4;% 坏点
H(:,1) = ones(n,1);
H(:,2) = x;
t0 = H\y;
t2 = t0;
e = 1;
foro = 1:1000
r = abs(H*t0 - y);
w = ones(n,1);
w(r>e) = e./r(r>e);
t = (H'*(repmat(w,1,2).*H))\(H'*(w.*y));
ifnorm(t - t0)
break;
end
t0 = t;
end
P(:,1) = ones(N,1);
P(:,2) = X;
F1 = P*t;
F2 = P*t2;% L2约束的最小二乘
plot(X,F1,'r-','linewidth',2);
hold on
plot(X,F2,'g--','linewidth',2);
plot(x,y,'bo','linewidth',2);
axis([-4,4,-4.5,3.5]);
legend('Robust Least Square','L_2 Consttrained LS','Training Samples');
运行结果如下:
以上就是今天推送的内容,欢迎讨论。
领取专属 10元无门槛券
私享最新 技术干货