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库urllib与urllib2主要区别分析
Jul 13 Python
Python简单实现enum功能的方法
Apr 25 Python
全面了解python字符串和字典
Jul 07 Python
Python模块文件结构代码详解
Feb 03 Python
python实现windows下文件备份脚本
May 27 Python
python 寻找离散序列极值点的方法
Jul 10 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
python复合条件下的字典排序
Dec 18 Python
python基于openpyxl生成excel文件
Dec 23 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 Python
 python中的元类metaclass详情
May 30 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使用数组实现队列
2012/02/05 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PHP中文乱码解决方案
2015/03/05 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
iframe实用操作锦集
2014/04/22 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
python计算列表内各元素的个数实例
2018/06/29 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
美国著名手表网站:Timepiece
2017/11/15 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
中文系师范生自荐信
2013/10/01 职场文书
迎新生标语大全
2014/10/06 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL