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

作者:王勇21633012 时间:2022-04-01 03:46:49 

本文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实现最小二乘法线性拟合

来源:https://blog.csdn.net/weixin_38275649/article/details/80330288

标签:python,最小二乘法,线性拟合
0
投稿

猜你喜欢

  • 设计角色的分工和配合

    2008-10-20 12:08:00
  • 网站设计配色方案教程

    2007-10-10 19:38:00
  • 使用HTML5中的canvas进行图形图像.游戏.动画开发时,不需要双缓冲机制

    2010-04-01 12:21:00
  • Linux安装Python3如何和系统自带的Python2并存

    2023-08-25 03:42:09
  • python实现桌面气泡提示功能

    2023-07-13 06:37:13
  • php文章内容分页并生成相应的htm静态页面代码

    2023-07-23 23:48:20
  • 解析:MySQL 数据库搜索中大小写敏感性

    2009-02-23 17:32:00
  • Python Opencv实现图像轮廓识别功能

    2023-02-27 12:32:40
  • 深入研究ASP中的Session

    2007-09-13 12:37:00
  • python sort、sort_index方法代码实例

    2022-12-16 00:43:17
  • 编写Python脚本来实现最简单的FTP下载的教程

    2022-11-12 01:25:45
  • Python生成随机数的方法详解(最全)

    2023-05-04 12:36:08
  • Python中plt.imshow(image)无法显示图片的解决

    2022-01-12 15:33:04
  • Tensorflow中TFRecord生成与读取的实现

    2023-05-02 07:21:20
  • IE不支持border-spacing的解决办法

    2009-04-28 13:11:00
  • 三分钟学会Sql Server的复制功能[图]

    2008-07-18 12:18:00
  • 如何利用Python和matplotlib更改纵横坐标刻度颜色

    2022-06-02 04:00:03
  • ubuntu16.04制作vim和python3的开发环境

    2022-08-11 00:11:07
  • Python实现密钥密码(加解密)实例详解

    2022-09-10 12:03:37
  • python用faker库批量生成假数据

    2023-04-09 13:15:46
  • asp之家 网络编程 m.aspxhome.com