用python的numpy作线性拟合、多项式拟合、对数拟合
转自:http://blog.itpub.net/12199764/viewspace-1743145/
项目中有涉及趋势预测的工作,整理一下这3种拟合方法:
1、线性拟合-使用math
import math
def linefit(x , y):
N = float(len(x))
sx,sy,sxx,syy,sxy=0,0,0,0,0
for i in range(0,int(N)):
sx += x[i]
sy += y[i]
sxx += x[i]*x[i]
syy += y[i]*y[i]
sxy += x[i]*y[i]
a = (sy*sx/N -sxy)/( sx*sx/N -sxx)
b = (sy - a*sx)/N
r = abs(sy*sx/N-sxy)/math.sqrt((sxx-sx*sx/N)*(syy-sy*sy/N))
return a,b,r
if __name__ == '__main__':
X=[ 1 ,2 ,3 ,4 ,5 ,6]
Y=[ 2.5 ,3.51 ,4.45 ,5.52 ,6.47 ,7.51]
a,b,r=linefit(X,Y)
print("X=",X)
print("Y=",Y)
print("拟合结果: y = %10.5f x + %10.5f , r=%10.5f" % (a,b,r) )
#结果为:y = 0.97222 x + 1.59056 , r= 0.98591
1、线性拟合-使用numpy
import numpy as np
X=[ 1 ,2 ,3 ,4 ,5 ,6]
Y=[ 2.5 ,3.51 ,4.45 ,5.52 ,6.47 ,7.51]
z1 = np.polyfit(X, Y, 1) #一次多项式拟合,相当于线性拟合
p1 = np.poly1d(z1)
print z1 #[ 1. 1.49333333]
print p1 # 1 x + 1.493
2、二次多项式拟合
import numpy
def polyfit(x, y, degree):
results = {}
coeffs = numpy.polyfit(x, y, degree)
results['polynomial'] = coeffs.tolist()
# r-squared
p = numpy.poly1d(coeffs)
# fit values, and mean
yhat = p(x) # or [p(z) for z in x]
ybar = numpy.sum(y)/len(y) # or sum(y)/len(y)
ssreg = numpy.sum((yhat-ybar)**2) # or sum([ (yihat - ybar)**2 for yihat in yhat])
sstot = numpy.sum((y - ybar)**2) # or sum([ (yi - ybar)**2 for yi in y])
results['determination'] = ssreg / sstot #准确率
return results
x=[ 1 ,2 ,3 ,4 ,5 ,6]
y=[ 2.5 ,3.51 ,4.45 ,5.52 ,6.47 ,7.2]
z1 = polyfit(x, y, 2)
print z1
3、对数函数拟合-这个是最难的,baidu上都找不到,google了半天才找到的。指数、幂数拟合啥的,都用这个,把func改写一下就行
from scipy import log as log print pcov
import numpy
from scipy import log
from scipy.optimize import curve_fit
def func(x, a, b):
y = a * log(x) + b
return y
def polyfit(x, y, degree):
results = {}
#coeffs = numpy.polyfit(x, y, degree)
popt, pcov = curve_fit(func, x, y)
results['polynomial'] = popt
# r-squared
yhat = func(x ,popt[0] ,popt[1] ) # or [p(z) for z in x]
ybar = numpy.sum(y)/len(y) # or sum(y)/len(y)
ssreg = numpy.sum((yhat-ybar)**2) # or sum([ (yihat - ybar)**2 for yihat in yhat])
sstot = numpy.sum((y - ybar)**2) # or sum([ (yi - ybar)**2 for yi in y])
results['determination'] = ssreg / sstot
return results
x=[ 1 ,2 ,3 ,4 ,5 ,6]
y=[ 2.5 ,3.51 ,4.45 ,5.52 ,6.47 ,7.51]
z1 = polyfit(x, y, 2)
print z1
转载于:https://www.cnblogs.com/gslyyq/p/5043847.html
用python的numpy作线性拟合、多项式拟合、对数拟合相关推荐
- pytho作线性拟合、多项式拟合、对数拟合
python opencv拟合: width是总宽,height是总高: [vx, vy, x, y] = cv2.fitLine(np.float32(values[j]), cv2.DIST_L2 ...
- 【Matlab】最小二乘法拟合多项式
前言 在最近的电机项目中,有遇到有传感器数据并不线性的问题,然后想要用最小二乘法做个曲线拟合,反过来去校准不线性的传感器的数据,因此记录一下使用最小二乘法来拟合多项式的曲线的步骤.本篇从最小二乘法的原 ...
- python多项式拟合_Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合。如 电...
Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合.如 电 多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法:imp ...
- 【Python】Numpy处理多项式类Polynomial
文章目录 构造函数 求导和积分 求根和反演 采样与拟合 其他方法 构造函数 Numpy中提供了多项式模块,里面封装了一些用以快速解决多项式问题的类和函数,其中最重要类的自然是Polynomial,其构 ...
- Python 最小二乘法拟合多项式
最小二乘法拟合多项式 一.功能 二.最小二乘法拟合多项式 三.运行结果 一.功能 利用最小二乘法去拟合直线.任意项高阶多项式. 二.最小二乘法拟合多项式 示例: import random i ...
- python数据分析 - numpy | ndarray数组 | numpy常用函数
文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...
- 使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】
使用Python和Numpy进行波士顿房价预测任务–详解 目录: 一.数据处理 (1)读入数据 (2)数据形状变换 (3)数据集划分 (4)数据归一化处理 (5)封装成load data函数 二.模型 ...
- 用 Python 和 Numpy 实现音频数字指纹特征识别
本文讲的是用 Python 和 Numpy 实现音频数字指纹特征识别, 我第一次用 Shazam 的时候,简直惊呆了.除了 GPS 功能和从楼梯摔下仍然没坏之外,能用一段音频片段识别歌曲是我所见过我手 ...
- [Python]Tkinter+Numpy+Matplotlib 进行的简单交互+曲线拟合+图像绘制【已改进】
用Python的Tkinter.Numpy.Matplotlib库对曲线拟合的一点探索[已改进] 需要用到的库:如标题 三大方面 功能 需要的库 一. 简单交互,获取函数或者样本点 tkinter[p ...
最新文章
- union(联合)合并查询结果
- latex基础(文字,图,表)
- Java之二分法查找
- java图像处理之自动对比度
- Spring Boot 2.x(六):优雅的统一返回值
- 18 WM配置-策略-激活仓位类型搜索(Bin Type Search)
- c++内联函数解析(inline)
- 矩阵快速幂的学习(系统的学习)
- 《人机交互与戏剧表演:用戏剧理论构建良好用户体验》一导读
- 计算机网络双向传输,计算机网络:传输层(2)
- 鼠标移动到曲线图上显示值
- Python的学习心得和知识总结(十二)|Python图形用户接口编程(Graphical User Interface编程 一)
- Android 使用google地图通过经纬度获取详细地址
- java中的域(field)是什么
- 浅谈AS2 传输/连接
- WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not
- dev c++ 中的Program received signal SIGSEGV Segmentation fault
- 周鸿伟鸿蒙系统,周鸿袆正式宣布!鸿蒙系统开源比较好,将全力支持华为新系统...
- git使用commit命令报错(please tell me who are you)
- Bean Validation完结篇:你必须关注的边边角角(约束级联、自定义约束、自定义校验器、国际化失败消息...)【享学Spring】