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中的map、reduce和filter浅析
Apr 26 Python
详解Python中DOM方法的动态性
Apr 11 Python
Ubuntu下安装PyV8
Mar 13 Python
Python语言的变量认识及操作方法
Feb 11 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
Feb 04 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
python读取xml文件方法解析
Aug 04 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
详解python爬取弹幕与数据分析
Nov 14 Python
Python self用法详解
Nov 28 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
javascript读取RSS数据
2007/01/20 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
python处理cookie详解
2014/02/07 Python
35个Python编程小技巧
2014/04/01 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
中医药大学毕业生自荐信
2013/11/08 职场文书
小班教师个人总结
2015/02/05 职场文书
史上最牛的辞职信
2015/02/28 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python