我有2个向量,x
和y
。 x
是输入向量,而y
是输出。只要x
最多具有6个值,它就起作用。有了7,它就不再起作用。
我已经尝试使用7、8和更多的值来尝试它。它总是给出NaN的错误。与6完美搭配。
x = [1 2 3 4 5 6];
y = 3 + x.^2 + normrnd(0,0.4,size(x));
alp = 0.005;
eps = 1.e-5;
w = LinearFuncModified(x,y,alp,eps,2);
function w=LinearFunc(x,y,alp,eps,upto)
%w = [15.8205 32.0654 24.6452];
w=zeros(1,upto+1);
[m,n] = size(x);
yh= zeros(1,n);
yh= w(1) + yh;
iter_yh=1;
while iter_yh<=upto
yh = w(iter_yh+1)*(x.^iter_yh) + yh;
iter_yh=iter_yh+1;
end
dj=zeros(1,upto+1);
Transx = x'
iter = 1;
err=1;
loss =3;
while err > eps
j(iter) = 0.5/n*sum((y-yh).^2);
pred_err = yh - y;
dj(1) = sum(pred_err)/n;
iter_dj=1;
while iter_dj<=upto
dj(iter_dj+1)=(pred_err*(Transx.^iter_dj))/n;
iter_dj=iter_dj+1;
end
err = norm(alp*dj);
w = w-alp*dj;
yh= zeros(1,n);
disp("w");
disp(w);
yh= w(1) + yh;
iter_yh=1;
while iter_yh<=upto
yh = w(iter_yh+1)*(x.^iter_yh) + yh;
iter_yh=iter_yh+1;
end
iter=iter+1;
end
plot(x,y,'-rs')
hold on
plot(x,yh,'-o')
hold off
end
即使有N个输入,它也应给出正确的w
值,但是却给出NaN。
有4个向量:
x
已输入,
y
,给出输出,
yh
试图产生尽可能接近的y
,并且
w
,其中包含“最多” +1个元素。
yh
完全取决于w
和x
,我将w
设为零的向量。现在y是一个给定的公式,取决于x。因此,我需要使w尽可能地接近3 0 4
(在这种情况下)并做到这一点,我在每次迭代中计算yh
和y
之间的误差然后使用该错误更新我的w
值,这将更新我的yh
值,依此类推。关键是,如果它与6一起使用,为什么不与7或更多一起使用?