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代码做configure文件
Jul 20 Python
详解Python中dict与set的使用
Aug 10 Python
全面了解python字符串和字典
Jul 07 Python
Python操作Excel之xlsx文件
Mar 24 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Django操作session 的方法
Mar 09 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
Python web如何在IIS发布应用过程解析
May 27 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
PHP合并静态文件详解
2014/11/14 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
PHP 裁剪图片
2021/03/09 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
Python笔记之工厂模式
2019/11/20 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
python与pycharm有何区别
2020/07/01 Python
python怎么删除缓存文件
2020/07/19 Python
区分python中的进程与线程
2020/08/13 Python
香港通票:Hong Kong Pass
2019/02/26 全球购物
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
大一学生假期实习的自我评价
2013/10/12 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
三好学生个人总结
2015/02/15 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书