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 ElementTree 基本读操作示例
Apr 09 Python
使用python绘制人人网好友关系图示例
Apr 01 Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
Django进阶之CSRF的解决
Aug 01 Python
详解Python time库的使用
Oct 10 Python
python 实现生成均匀分布的点
Dec 05 Python
Python hashlib模块实例使用详解
Dec 24 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
Python 中面向接口编程
May 20 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 时间转换Unix时间戳代码
2010/01/22 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
php-msf源码详解
2017/12/25 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python3 max()函数基础用法
2019/02/19 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
2013年高中生自我评价
2013/10/23 职场文书
毕业生就业自荐信
2013/12/04 职场文书
采购部部门职责
2013/12/15 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
个人租房协议书
2014/11/28 职场文书
开除员工通知
2015/04/22 职场文书
党纪处分决定书
2015/06/24 职场文书
公司备用金管理制度
2015/08/04 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
MySQL 数据类型详情
2021/11/11 MySQL
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
java实现面板之间切换功能
2022/06/10 Java/Android