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使用点操作符访问字典(dict)数据的方法
Mar 16 Python
Python base64编码解码实例
Jun 21 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
python决策树之CART分类回归树详解
Dec 20 Python
python查看模块安装位置的方法
Oct 16 Python
python事件驱动event实现详解
Nov 21 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
Python传递参数的多种方式(小结)
Sep 18 Python
python统计指定目录内文件的代码行数
Sep 19 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 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 Cookie的一个使用注意点
2008/11/08 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
Python中的进程分支fork和exec详解
2015/04/11 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
python随机生成库faker库api实例详解
2019/11/28 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
Python装饰器用法与知识点小结
2020/03/09 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
2014年小班元旦活动方案
2014/02/16 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
金融保险专业求职信
2014/09/03 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
西双版纳导游词
2015/02/03 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server