权重非线性拟合

拟合函数为\(f_{\theta}(x),x\)是输入,y是输出,\(\theta\)是参数,f是拟合函数
1.随机初始化参数\(\theta\),\(y=\sqrt{w}.*y\)
2.计算拟合值\(yfit=\sqrt{w}.*f_{\theta}(x),err=y-yfit\),以及\(sse=r^T*r\)
3.计算雅克比矩阵J(\(J*=W^{1/2}J\)).
雅克比矩阵计算公式:

for i = 1:numParams
    % Calculate delta(:,i), but remember to set it back to 0 at the end of the loop.
    delta(:,i) = DerivStep(i) * theta(:,i);
    deltaZero = delta(:,i) == 0;
    if any(deltaZero)
        % Use the norm as the "scale", or 1 if the norm is 0.
        nTheta = sqrt(sum(theta(deltaZero,:).^2, 2));
        delta(deltaZero,i) = DerivStep(i) * (nTheta + (nTheta==0));
    end
    thetaNew = theta + delta;
    yplus = func(thetaNew);
    dy = yplus(:) - y0(:);
    J(:,i) = dy./delta(rowIdx,i);
    delta(:,i) = 0;
end

4.Jplus = [J;diag(sqrt(lambda*sum(abs(J).^2,1)))],
rplus = [err;zeros(p,1)],p为参数个数
参数变化为step =Jplus\rplus;
5.$\theta = \theta+ step $
6.如果sse>sseold
\(lambda = max(0.1.*lambda,eps)\)
else
\(lambda = 10.*lambda\);
计算新的Jplus(J不用重新计算),step,beta,yfit,err,sse,并再重新判断sse>sseold,满足的话回到2

具体详见nlinfit.m函数

posted @ 2018-01-12 16:39  blog_hfg  阅读(786)  评论(0)    收藏  举报