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 相关文章推荐
python3 判断列表是一个空列表的方法
May 04 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
简单了解python变量的作用域
Jul 30 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
python3 webp转gif格式的实现示例
Dec 10 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
Python基于字典实现switch case函数调用
Jul 22 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
关于Python字符编码与二进制不得不说的一些事
Oct 04 Python
Python如何使用循环结构和分支结构
Apr 13 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 json中文编码为null的解决办法
2016/12/14 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python实现的rsa加密算法详解
2018/01/24 Python
pandas数值计算与排序方法
2018/04/12 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
请说出以下代码输出什么
2013/08/30 面试题
创业计划书的主要内容有哪些
2014/01/29 职场文书
办公设备采购方案
2014/03/16 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
最美护士演讲稿
2014/08/27 职场文书
员工趣味活动方案
2014/08/27 职场文书
重温入党誓词主持词
2015/06/29 职场文书
生活小常识广播稿
2015/08/19 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书