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 相关文章推荐
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
python docx 中文字体设置的操作方法
May 08 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
Django工程的分层结构详解
Jul 18 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
jupyter notebook 重装教程
Apr 16 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 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
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
解析php中反射的应用
2013/06/18 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
Python中的Numpy入门教程
2014/04/26 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python实现机器人卡牌
2019/10/06 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
毕业生在校学习的自我评价分享
2013/10/08 职场文书
国家助学金获奖感言
2014/01/31 职场文书
产品质量保证书
2014/04/29 职场文书
提拔干部考察材料
2014/05/26 职场文书
七夕活动策划方案
2014/08/16 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
通讯稿范文
2015/07/22 职场文书
python基础之爬虫入门
2021/05/10 Python
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python