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 相关文章推荐
对于Python的Django框架部署的一些建议
Apr 09 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
Python微医挂号网医生数据抓取
Jan 24 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
opencv实现简单人脸识别
Feb 19 Python
Python中使用gflags实例及原理解析
Dec 13 Python
基于FME使用Python过程图解
May 13 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
python程序如何进行保存
Jul 03 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
Python 批量下载阴阳师网站壁纸
May 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
分享PHP入门的学习方法
2007/01/02 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
毕业生就业协议书
2014/04/11 职场文书
管理标语大全
2014/06/24 职场文书
《灰雀》教学反思
2016/02/19 职场文书
如何在Python中妥善使用进度条详解
2022/04/05 Python