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实现问号表达式(?)的方法
Nov 27 Python
用Django写天气预报查询网站
Oct 21 Python
django解决跨域请求的问题详解
Jan 20 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
May 10 Python
Python线程指南分享
Nov 19 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
Python bytes string相互转换过程解析
Mar 05 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
浅谈Python中的模块
Jun 10 Python
Keras设置以及获取权重的实现
Jun 19 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
Python字符串常规操作小结
Apr 03 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
收音机术语解释
2021/03/01 无线电
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
PHP session 会话处理函数
2016/06/06 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
Jquery ui css framework
2010/06/28 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
jQuery实现跨域
2015/02/03 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
JS添加删除DIV的简单实例
2016/07/08 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
angular分页指令操作
2017/01/09 Javascript
js date 格式化
2017/02/15 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
微信小程序多音频播放进度条问题
2018/08/28 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
三分钟演讲稿事例
2014/03/03 职场文书
产品销售计划书
2014/05/04 职场文书
员工安全生产责任书
2014/07/22 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
Golang 链表的学习和使用
2022/04/19 Golang