• R语言中如何使用最小二乘法


    R语言中如何使用最小二乘法

     这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题。
            代码如下:
    > x<-c(6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2)
    > y<-c(5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3)
    > lsfit(x,y)
           结果如下:
    $coefficients
    Intercept         X
    0.8310557 0.9004584
       说明: Intercept :截距
                X: 变量x的系数
       即对于一元一次函数截距式方程:y=0.9x 0.83
    输出结果:
          k= 0.900458420439 b= 0.831055638877
          cost:1
          求解的拟合直线为:
          y=0.9x 0.83

         如果你不追求绘图的美观,可以简单的直接用R绘制散点图观察规律也是可以的(当然也是可以通过设置参数调美观点的)。
    > plot(x,y)  ###x,y是上面已经赋值过的数据
        结果如图:


         下面我们接着调整目标函数及样本数据:
         目标函数:y=ax2 bx c
    > x<-c(1,2,3,4,5,6)
    > y<-c(9,18,31,48,69,94)
    > lsfit(x,y)
    $coefficients
    Intercept         X
    -14.66667  17.00000
       从结果可以看出,求解的依然是y=kx b形式的函数。
       而调整python中的代码(完整代码见下面的连接):
    def func(p,x):
        a,b,c=p
        return a*x*x b*x c

    p0=[10,10,10]

    #读取结果
    a,b,c=Para[0]
    print("a=",a,"b=",b,"c=",c)
    print("cost:" str(Para[1]))
    print("求解的拟合直线为:")
    print("y=" str(round(a,2)) "x*x " str(round(b,2)) "x " str(c))
    a= 2.0 b= 3.0 c= 4.0
    cost:2
    求解的拟合直线为:
    y=2.0x*x 3.0x 4.0
       通过对比看出,python  scipy库中的leastsq函数通用性还是比较高的。
       目标函数:y=ax2 bx c的非线性回归的拟合过程,见:机器学习:形如抛物线的散点图在python和R中的非线性回归拟合方法数据分析师培训

  • 相关阅读:
    stm32 usart 串口
    stm32 usart 串口
    stm32 PWM
    stm32 PWM
    stm32 定时器 通用定时器
    stm32 定时器 通用定时器
    stm32 外部中断
    linux+jre+apache+mysql+tomcat调优
    Cent OS服务器配置(JDK+Tomcat+MySQL)
    linux---文本编辑vi
  • 原文地址:https://www.cnblogs.com/amengduo/p/9587100.html
Copyright © 2020-2023  润新知