最小二乘法拟合直线

误差公式

    最小二乘法第一步就是找出最小误差进行优化,误差公式如下

 ,  意思就是用每一个样本点的因变量减去要拟合函数的因变量(这个因变量由传入样本点X得到)的平方累加。

最小二乘法函数

   为leastsq(func, x0, args=())

  •   func:计算误差函数
  •   x0 :传入的参数(随便一个点就行)
  •   args :样本点

绘制步骤

  1. 写出要拟合的函数
  2. 误差公式
  3.  写样本点然后调用leastsq函数

代码

     

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq

def func(p,x):   #要拟合的数据
    k,b=p
    return k*x+b

def wayerror(p,x,y,s):    #误差计算方法
    print(s)
    return func(p, x) - y

if __name__ == '__main__':
    X = np.array([5.19, 2.12, 6.39, 8.71, 4.7, 2.66, 6.78])
    Y = np.array([6.01, 2.78, 4.47, 5.71, 4.1, 4.23, 4.05])
    s = "绘制样例点成功"
    P = leastsq(wayerror, [1, 1], args=(X, Y, s))
    k, b = P[0]
    print("k=", k, '\n', "b=", b)
    plt.scatter(X, Y, color="blue", label="Sample Point", linewidth=3)  # 绘制散点图
    x = np.linspace(0, 10, 1000)
    y = k * x + b
    plt.plot(x, y, color="red", label="Desination Line", linewidth=2)  # 绘制拟合直线
    plt.legend()
    plt.show()

 


 

你可能感兴趣的:(python)