zoukankan      html  css  js  c++  java
  • 最小二乘优化

    最小二乘优化

    在之前有一个, 我们用的是解方程的方法(嘿嘿,要是无解咋办呢?),当然也可以用多项式拟合。

    最小二乘优化是一个什么问题呢?

    最小化这个 ,这也是最小二乘优化的定义,在Matlab中有处理这个最小二乘优化问题的函数:

    lsqlin,lsqcurvefit,Lsqnonlin,Lsqnonneg四个函数,四个函数功能也不一样呢,求的的最优化表达式也不一样。

    lsqlin函数

    lsqlin函数功能:

    解释一下这个式子:上面的2指的是平方,下面的2是2-范数。

    
    
    x = [19 25 31 38 44]';
    y = [19.0 32.3 49.0 73.3 97.8]';
    r = [ones(5,1) x.^2];
    ab=lsqlin(r,y);
    x0 = 19:0.1:44;
    y0 = ab(1) + ab(2)*x0.^2;
    plot(x,y,'o',x0,y0,'r');
    

      

    同样得到ab(1)和ab(2);

    可以看出,他主要用来解线性的拟合。

    lsqcurvefit函数

    栗子:拟合曲线​ 中的参数

    P95

    调用形式:

    非线性拟合时,每一次的运行结果可能都不相同

    数据没找到,不是很好操作。

    
    
    x0 = -10:0.01:10;
    y0 = normpdf(x0,0,1);
    save normpdfdata x0 y0;
    

     

    clc,clear;
    load normpdfdata
    mf = @(cs,xdata)1/sqrt(2*pi)/cs(2)*exp(-(xdata-cs(1)).^2/cs(2)^2/2);
    cs = lsqcurvefit(mf,rand(2,1),x0,y0);
    

      

    
    

    使用了匿名函数mf,不重新定义和一个fun函数的.m文件了。

    拟合出来和原来生成数据的二项式分布的参数u,e及其接近了。

    lsqnonlin函数

    
    
    clc,clear
    load normpdfdata
    F = @(cs)1/sqrt(2*pi)/cs(2)*exp(-(x0-cs(1)).^2/cs(2)^2/2)-y0;
    cs0 = rand(2,1);
    cs = lsqnonlin(F,cs0);
    

      

    参数拟合的效果还是十分准的。

    lsqnonneg函数

    到了最后一个函数了。嘿嘿,我发现书的排版还是有问题的,他应该和第一个lsqlin函数放在一起说的。因为他们的功能很类似哦。

    P97栗子5.11:

    咦~~,你会发现不在像前面的一个 或者函数的形式,而是要求两个参数x。

    其实不必大惊小怪,其实还是一个式子,就按照矩阵乘法乘起来,就是两个参数的组合成的

    直接代入:

    
    
    c = [0.0372 0.2869
        0.6861 0.7071
        0.6233 0.6245
        0.6344 0.6170];
    d = [0.8587;
        0.1781
        0.0747
        0.8405];
    x = lsqnonneg(c,d);
    

      

    至此:

    拟合常用方法就完成了,线性拟合,非线性拟合两个部分。

     

  • 相关阅读:
    BZOJ 2005 能量采集
    HDU 2841 Visible Trees(莫比乌斯反演)
    hihocoder 1543
    hihocoder 1311
    hdu 6069
    hdu 6058
    hdu 6034
    拓展欧几里得
    poj 3321
    树状数组总结
  • 原文地址:https://www.cnblogs.com/TreeDream/p/8251109.html
Copyright © 2011-2022 走看看