python实现最小二乘法线性拟合

 更新时间:2019年07月19日 11:08:32   作者:王勇21633012  
这篇文章主要为大家详细介绍了python实现最小二乘法线性拟合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文python代码实现的是最小二乘法线性拟合,并且包含自己造的轮子与别人造的轮子的结果比较。

问题:对直线附近的带有噪声的数据进行线性拟合,最终求出w,b的估计值。

最小二乘法基本思想是使得样本方差最小。

代码中self_func()函数为自定义拟合函数,skl_func()为调用scikit-learn中线性模块的函数。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
 
n = 101
 
x = np.linspace(0,10,n)
noise = np.random.randn(n)
y = 2.5 * x + 0.8 + 2.0 * noise
 
def self_func(steps=100, alpha=0.01):
  w = 0.5
  b = 0
  alpha = 0.01
  for i in range(steps):
    y_hat = w*x + b
    dy = 2.0*(y_hat - y)
    dw = dy*x
    db = dy
    w = w - alpha*np.sum(dw)/n
    b = b - alpha*np.sum(db)/n
    e = np.sum((y_hat-y)**2)/n
    #print (i,'W=',w,'\tb=',b,'\te=',e)
  print ('self_func:\tW =',w,'\n\tb =',b)
  plt.scatter(x,y)
  plt.plot(np.arange(0,10,1), w*np.arange(0,10,1) + b, color = 'r', marker = 'o', label = 'self_func(steps='+str(steps)+', alpha='+str(alpha)+')')
 
def skl_func():
  lr = LinearRegression()
  lr.fit(x.reshape(-1,1),y)
  y_hat = lr.predict(np.arange(0,10,0.75).reshape(-1,1))
  print('skl_fun:\tW = %f\n\tb = %f'%(lr.coef_,lr.intercept_))
  plt.plot(np.arange(0,10,0.75), y_hat, color = 'g', marker = 'x', label = 'skl_func')
  
self_func(10000)
skl_func()
plt.legend(loc='upper left')
plt.show()

结果:

self_func:  W = 2.5648753825503197     b = 0.24527830841237772
skl_fun:     W = 2.564875                             b = 0.245278

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python标准库sys库常用功能详解

    Python标准库sys库常用功能详解

    这篇文章主要介绍了Python标准库sys库常用功能详解,sys是Python提供的程序与解释器交互的标准库,文章围绕主题展开相关介绍,需要的朋友可以参考一下
    2022-07-07
  • Python实现PS图像抽象画风效果的方法

    Python实现PS图像抽象画风效果的方法

    这篇文章主要介绍了Python实现PS图像抽象画风效果的方法,涉及Python基于skimage模块进行图像处理的相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Python游戏开发之Pygame使用的最全教程分享

    Python游戏开发之Pygame使用的最全教程分享

    Pygame库是Python中一个专为游戏开发设计的库,它提供了大量的功能来帮助开发者创建各种2D游戏,本文就来和大家分享一下Pygame的具体使用,希望对大家有所帮助
    2023-05-05
  • Pytorch中的backward()多个loss函数用法

    Pytorch中的backward()多个loss函数用法

    这篇文章主要介绍了Pytorch中的backward()多个loss函数用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 使用Python处理Excel表格的简单方法

    使用Python处理Excel表格的简单方法

    这篇文章主要介绍了使用Python处理Excel表格的简单方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2018-06-06
  • python包实现 retrying 重复回调操作

    python包实现 retrying 重复回调操作

    这篇文章主要介绍了python包实现 retrying 重复回调操作,文章python的相关资料展开对retrying 重复回调的详细介绍,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • python接口,继承,重载运算符详解

    python接口,继承,重载运算符详解

    这篇文章主要给大家介绍了关于Python接口,继承,重载运算符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们参考借鉴,下面随着小编来一起学习学习吧
    2021-08-08
  • Python字符串对象实现原理详解

    Python字符串对象实现原理详解

    这篇文章主要介绍了Python字符串对象实现原理详解,在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,需要的朋友可以参考下
    2019-07-07
  • Python中X[:,0]和X[:,1]的用法

    Python中X[:,0]和X[:,1]的用法

    这篇文章主要介绍了Python中X[:,0]和X[:,1]的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • python BitMap算法处理20亿随机整数去重

    python BitMap算法处理20亿随机整数去重

    这篇文章主要为大家介绍了python BitMap算法处理20亿随机整数去重,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论