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创建XML文档
Mar 01 Python
Python3.2中的字符串函数学习总结
Apr 23 Python
python简单判断序列是否为空的方法
Jun 30 Python
TensorFlow实现RNN循环神经网络
Feb 28 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 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调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
Javascript模块模式分析
2008/05/16 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
详解vue中computed 和 watch的异同
2017/06/30 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
Javascript var变量删除原理及实现
2020/08/26 Javascript
Python读取word文本操作详解
2018/01/22 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
喷漆工的岗位职责
2014/03/17 职场文书
3分钟演讲稿
2014/04/30 职场文书
企业职业病防治方案
2014/05/29 职场文书
班级活动总结格式
2014/08/30 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
任命通知范文
2015/04/21 职场文书
法人身份证明书
2015/06/18 职场文书
五年级作文之劳动作文
2019/11/12 职场文书