n =10;%50 个节点
N=1000;%1000 个节点
x=linspace(-3,3,n)';%在 -3 到 3 上找 50 个节点
X=linspace(-4,4,N)';%在 -3 到 3 上找 1000 个节点 去拟合这 50 个节点
y=x+0.2*randn(n,1);%通过函数f(x) 得到 y。
y(n)=-4;% 设置一个异常值
p(:,1)=ones(n,1); %线性模型 a + bx
p(:,2)=x;
t0=p\y; %给参数设置一个适当的初值
e=1; %将阈值设置为 1
for o=1:1000
r=abs(p*t0-y);% 计算残差的绝对值
w=zeros(n,1); %计算权重矩阵
w(r<=e)=(1-r(r<=e).^2/e^2).^2;
t=(p'*(repmat(w,1,2).*p))\(p'*(w.*y));
if norm(t-t0)<0.001,break,end
t0=t;
end
P(:,1)=ones(N,1);
P(:,2)=X;
F=P*t;
figure(1);
clf;
hold on;
axis([-4 4 -4.5 3.5]);% X 轴的范围是-2.8 ~ 2.8。Y 轴的范围是 -0.5 ~ 1.2
plot(X,F,'g-');
plot(x,y,'bo');
代码详细解释情况 Huber损失