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


Posted in Python onJuly 19, 2019

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

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

Python 相关文章推荐
github配置使用指南
Nov 18 Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
Python导入模块时遇到的错误分析
Aug 30 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
Python socket 套接字实现通信详解
Aug 27 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
Python grpc超时机制代码示例
Sep 14 Python
python生成xml时规定dtd实例方法
Sep 21 Python
python函数超时自动退出的实操方法
Dec 28 Python
Python中三种花式打印的示例详解
Mar 19 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 #Python
python如何实现数据的线性拟合
Jul 19 #Python
django获取from表单multiple-select的value和id的方法
Jul 19 #Python
django 信号调度机制详解
Jul 19 #Python
python傅里叶变换FFT绘制频谱图
Jul 19 #Python
Django forms表单 select下拉框的传值实例
Jul 19 #Python
Django组件content-type使用方法详解
Jul 19 #Python
You might like
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
js 幻灯片的实现
2011/12/06 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
理解Python中的With语句
2016/03/18 Python
关于python的list相关知识(推荐)
2017/08/30 Python
Python实现的归并排序算法示例
2017/11/21 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
python导入模块交叉引用的方法
2019/01/19 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
法国体育用品商店:GO Sport
2019/10/23 全球购物
秘书专业自荐信范文
2013/12/26 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
终止劳动合同协议书
2014/04/14 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
朋友聚会开场白
2015/06/01 职场文书
python基础之while循环语句的使用
2021/04/20 Python