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 相关文章推荐
wxPython事件驱动实例详解
Sep 28 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
python机器学习之神经网络(三)
Dec 20 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Python读取指定日期邮件的实例
Feb 01 Python
Python面向对象原理与基础语法详解
Jan 02 Python
如何将json数据转换为python数据
Sep 04 Python
python爬虫调度器用法及实例代码
Nov 30 Python
分享Python获取本机IP地址的几种方法
Mar 17 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
PHP解决中文乱码
2017/04/28 PHP
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
Layui给switch添加响应事件的例子
2019/09/03 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
python生成并处理uuid的实现方式
2020/03/03 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
给医务人员表扬信
2014/01/12 职场文书
小学生倡议书范文
2014/05/13 职场文书
学校食品安全实施方案
2014/06/14 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
企业年会祝酒词
2015/08/11 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers