zoukankan      html  css  js  c++  java
  • python 最小二乘 leastsq 函数实现

    代码修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html

    网上百度了一下,主要是两个例子,一个利用了多项式函数,一个就是这个。有些细节没看懂,主要是忽略了p是个参数的数组而非一个数(Python基础问题),纠结完加上注释做个笔记

    1. # 修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html
    2. ### 最小二乘法 python leastsq###
    3. import numpy as np
    4. from scipy.optimize import leastsq
    5. ###采样点(Xi,Yi)###
    6. Xi=np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78])
    7. Yi=np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])
    8. # p是个数组,表示所有参数!!!
    9. ### 定义误差函数,拟合y=kx+b,p[0]表示k,p[1]表示b
    10. def error(p,x,y):
    11. return (p[0]*x+p[1])-y #x、y都是列表,故返回值也是个列表
    12. ###主函数从此开始###
    13. # 可能是使用梯度下降法而非矩阵运算,因此需要给定初始参数p0
    14. p0=[2,2]
    15. Para=leastsq(error,p0,args=(Xi,Yi)) #把error函数中除了p以外的参数打包到args中
    16. k = Para[0][0]
    17. b = Para[0][1]
    18. print("k=",k,' ',"b=",b)
    19. ###绘图,看拟合效果###
    20. import matplotlib.pyplot as plt
    21. plt.scatter(Xi,Yi,color="red",label="Sample Point",linewidth=3) #画样本点
    22. x=np.linspace(0,10,100)
    23. y=k*x+b
    24. plt.plot(x,y,color="orange",label="Fitting Line",linewidth=2) #画拟合直线
    25. plt.legend()
    26. plt.show()




  • 相关阅读:
    [IOI2014] 假期
    [SPOJ22343] Norma
    [APC001] D Forest
    [POI2004] SZN
    [JZOJ5837] Omeed
    [JZOJ5836] Sequence
    【题解】[CH弱省胡策R2]TATT
    【题解】简单题
    【题解】巧克力王国
    【题解】[SDOI2010]捉迷藏
  • 原文地址:https://www.cnblogs.com/fly2wind/p/6842717.html
Copyright © 2011-2022 走看看