python之拟合的实现


Posted in Python onJuly 19, 2019

一、多项式拟合

多项式拟合的话,用的的是numpy这个库的polyfit这个函数。那么多项式拟合,最简单的当然是,一次多项式拟合了,就是线性回归。直接看代码吧

import numpy as np
 
def linear_regression(x,y):
 #y=bx+a,线性回归
 num=len(x)
 b=(np.sum(x*y)-num*np.mean(x)*np.mean(y))/(np.sum(x*x)-num*np.mean(x)**2)
 a=np.mean(y)-b*np.mean(x)
 return np.array([b,a])
def f(x):
 return 2*x+1
x=np.linspace(-5,5)
y=f(x)+np.random.randn(len(x))#加入噪音
y_fit=np.polyfit(x,y,1)#一次多项式拟合,也就是线性回归
print(linear_regression(x,y))
print(y_fit)

手写线性回归我还是会的,然后我们来看下输出:

[1.9937839 1.24167225]
[1.9937839 1.24167225]

由于有random每次显示的结果都不一样,但很明显的是上下两个print是意料之中的一样,emmmmm,一次多项式拟合的源代码应该就是像我写的那样。好了,那么一次以上呢?咳咳,我数学不算太好,还是老老实实用库函数吧,顺便画下图,见识它的威力。

import numpy as np
from matplotlib import pyplot as plt
 
def f(x):
 return x**2+1
def f_fit(x,y_fit):
 a,b,c=y_fit.tolist()
 return a*x**2+b*x+c
x=np.linspace(-5,5)
y=f(x)+np.random.randn(len(x))#加入噪音
y_fit=np.polyfit(x,y,2)#二次多项式拟合
y_show=np.poly1d(y_fit)#函数优美的形式
print(y_show)#打印
y1=f_fit(x,y_fit)
plt.plot(x,f(x),'r',label='original')
plt.scatter(x,y,c='g',label='before_fitting')#散点图
plt.plot(x,y1,'b--',label='fitting')
plt.title('polyfitting')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()#显示标签
plt.show()

输出:

2
1.001 x - 0.04002 x + 0.8952

python之拟合的实现

拟合效果看起来还是不错的。

二、各种函数的拟合

一般来说,多项式的拟合就能拟合很多函数了,比如指数函数,取对数就能化为多项式函数,甚至是一次多项式函数。可是,那些三角函数之类的复杂函数不能化为多项式去拟合,怎么办呢?要用到scipy.optimize的curve_fit函数了。

直接贴代码:

import numpy as np
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit
 
def f(x):
 return 2*np.sin(x)+3
def f_fit(x,a,b):
 return a*np.sin(x)+b
def f_show(x,p_fit):
 a,b=p_fit.tolist()
 return a*np.sin(x)+b
x=np.linspace(-2*np.pi,2*np.pi)
y=f(x)+0.5*np.random.randn(len(x))#加入了噪音
p_fit,pcov=curve_fit(f_fit,x,y)#曲线拟合
print(p_fit)#最优参数
print(pcov)#最优参数的协方差估计矩阵
y1=f_show(x,p_fit)
plt.plot(x,f(x),'r',label='original')
plt.scatter(x,y,c='g',label='before_fitting')#散点图
plt.plot(x,y1,'b--',label='fitting')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

输出:

[1.91267059 3.04489528]
[[ 9.06910892e-03 -1.83703696e-11]
[-1.83703696e-11 4.44386331e-03]]

python之拟合的实现

使用方法基础的就是这样了。然后更多详细的参数的使用就是要看官网了。

1、https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

2、https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.curve_fit.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
django 微信网页授权登陆的实现
Jul 30 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
详解分布式系统中如何用python实现Paxos
May 18 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 #Python
python SVM 线性分类模型的实现
Jul 19 #Python
Django密码系统实现过程详解
Jul 19 #Python
Tensorflow实现酸奶销量预测分析
Jul 19 #Python
Python实现基于SVM的分类器的方法
Jul 19 #Python
Tensorflow模型实现预测或识别单张图片
Jul 19 #Python
python django下载大的csv文件实现方法分析
Jul 19 #Python
You might like
php操作excel文件 基于phpexcel
2010/07/02 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
Python抓取京东图书评论数据
2014/08/31 Python
Python SQLite3简介
2018/02/22 Python
python中的变量如何开辟内存
2018/06/26 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
信息管理员岗位职责
2013/12/01 职场文书
社团活动总结报告
2014/06/27 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
2014年学前班工作总结
2014/12/08 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
运动会开幕式主持词
2015/07/01 职场文书