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中操作列表之List.pop()方法的使用
May 21 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
python爬取网页转换为PDF文件
Jun 07 Python
Python Requests库基本用法示例
Aug 20 Python
Python WEB应用部署的实现方法
Jan 02 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
python求质数列表的例子
Nov 24 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 Python
python线程优先级队列知识点总结
Feb 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
php 操作excel文件的方法小结
2009/12/31 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
react路由配置方式详解
2017/08/07 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
python实现基本进制转换的方法
2015/07/11 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
Python assert语句的简单使用示例
2019/07/28 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
迟到检讨书800字
2014/01/13 职场文书
话题作文之呼唤
2019/12/18 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
Win11开始菜单添加休眠选项
2022/04/19 数码科技