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 相关文章推荐
13个最常用的Python深度学习库介绍
Oct 28 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
浅谈python之新式类
Aug 12 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
Django框架创建项目的方法入门教程
Nov 04 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
Python列表切片常用操作实例解析
Mar 10 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
通过案例解析python鸭子类型相关原理
Oct 10 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
Mysql的常用命令
2006/10/09 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php json转换相关知识(小结)
2018/12/21 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
python操作日期和时间的方法
2014/03/11 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python环境变量设置方法
2016/08/28 Python
Python模拟登陆实现代码
2017/06/14 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
干部年终考核评语
2015/01/04 职场文书
升学宴学生答谢词
2015/01/05 职场文书
聘任书范文大全
2015/09/21 职场文书
PHP新手指南
2021/04/01 PHP
为什么node.js不适合大型项目
2021/04/28 Javascript
MySQL的索引你了解吗
2022/03/13 MySQL