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基础教程之序列详解
Aug 29 Python
Python正则简单实例分析
Mar 21 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
pip安装Python库时遇到的问题及解决方法
Nov 23 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
python实现高效的遗传算法
Apr 07 Python
变长双向rnn的正确使用姿势教学
May 31 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中对2个数组相加的函数
2011/06/24 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
python修改字典内key对应值的方法
2015/07/11 Python
详解Django中Request对象的相关用法
2015/07/17 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
酒吧总经理岗位职责
2013/12/10 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
教师工作决心书
2015/02/04 职场文书
毕业班工作总结
2015/08/10 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js