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中使用smtplib和email模块发送邮件实例
Apr 22 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
详解Python中where()函数的用法
Mar 27 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
Django之模型层多表操作的实现
Jan 08 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Python实现的文轩网爬虫完整示例
May 16 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
Python Pandas数据中对时间的操作
Jul 30 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
Python中递归以及递归遍历目录详解
Oct 24 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
我的论坛源代码(四)
2006/10/09 PHP
php获取网页内容方法总结
2008/12/04 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
javascript 闭包疑问
2010/12/30 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
vue项目实战总结篇
2018/02/11 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python中global与nonlocal比较
2014/11/21 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
Python的语言类型(详解)
2017/06/24 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
python能开发游戏吗
2020/06/11 Python
生产管理的三大手法
2013/11/11 职场文书
合同专员岗位职责
2013/12/18 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
给校长的建议书200字
2014/05/16 职场文书
旷课检讨书范文
2015/01/27 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技