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 相关文章推荐
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
python实现windows下文件备份脚本
May 27 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
详解Python中is和==的区别
Mar 21 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
python实现统计文本中单词出现的频率详解
May 20 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
python 调用Google翻译接口的方法
Dec 09 Python
python实现剪贴板的操作
Jul 01 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中使用Oracle数据库(3)
2006/10/09 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
理解javascript对象继承
2016/04/17 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
基于javascript实现放大镜特效
2020/12/03 Javascript
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python求绝对值的三种方法小结
2019/12/04 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
自考毕业生自我鉴定
2013/11/04 职场文书
卖房协议书
2014/04/11 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
自我检讨报告
2015/01/28 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
集结号观后感
2015/06/08 职场文书
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
解决 redis 无法远程连接
2022/05/15 Redis
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python