转自: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作线性拟合、多项式拟合、对数拟合相关推荐

  1. pytho作线性拟合、多项式拟合、对数拟合

    python opencv拟合: width是总宽,height是总高: [vx, vy, x, y] = cv2.fitLine(np.float32(values[j]), cv2.DIST_L2 ...

  2. 【Matlab】最小二乘法拟合多项式

    前言 在最近的电机项目中,有遇到有传感器数据并不线性的问题,然后想要用最小二乘法做个曲线拟合,反过来去校准不线性的传感器的数据,因此记录一下使用最小二乘法来拟合多项式的曲线的步骤.本篇从最小二乘法的原 ...

  3. python多项式拟合_Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合。如 电...

    Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合.如 电 多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法:imp ...

  4. 【Python】Numpy处理多项式类Polynomial

    文章目录 构造函数 求导和积分 求根和反演 采样与拟合 其他方法 构造函数 Numpy中提供了多项式模块,里面封装了一些用以快速解决多项式问题的类和函数,其中最重要类的自然是Polynomial,其构 ...

  5. Python 最小二乘法拟合多项式

    最小二乘法拟合多项式 一.功能 二.最小二乘法拟合多项式 三.运行结果 一.功能   利用最小二乘法去拟合直线.任意项高阶多项式. 二.最小二乘法拟合多项式   示例: import random i ...

  6. python数据分析 - numpy | ndarray数组 | numpy常用函数

    文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...

  7. 使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】

    使用Python和Numpy进行波士顿房价预测任务–详解 目录: 一.数据处理 (1)读入数据 (2)数据形状变换 (3)数据集划分 (4)数据归一化处理 (5)封装成load data函数 二.模型 ...

  8. 用 Python 和 Numpy 实现音频数字指纹特征识别

    本文讲的是用 Python 和 Numpy 实现音频数字指纹特征识别, 我第一次用 Shazam 的时候,简直惊呆了.除了 GPS 功能和从楼梯摔下仍然没坏之外,能用一段音频片段识别歌曲是我所见过我手 ...

  9. [Python]Tkinter+Numpy+Matplotlib 进行的简单交互+曲线拟合+图像绘制【已改进】

    用Python的Tkinter.Numpy.Matplotlib库对曲线拟合的一点探索[已改进] 需要用到的库:如标题 三大方面 功能 需要的库 一. 简单交互,获取函数或者样本点 tkinter[p ...

最新文章

  1. union(联合)合并查询结果
  2. latex基础(文字,图,表)
  3. Java之二分法查找
  4. java图像处理之自动对比度
  5. Spring Boot 2.x(六):优雅的统一返回值
  6. 18 WM配置-策略-激活仓位类型搜索(Bin Type Search)
  7. c++内联函数解析(inline)
  8. 矩阵快速幂的学习(系统的学习)
  9. 《人机交互与戏剧表演:用戏剧理论构建良好用户体验》一导读
  10. 计算机网络双向传输,计算机网络:传输层(2)
  11. 鼠标移动到曲线图上显示值
  12. Python的学习心得和知识总结(十二)|Python图形用户接口编程(Graphical User Interface编程 一)
  13. Android 使用google地图通过经纬度获取详细地址
  14. java中的域(field)是什么
  15. 浅谈AS2 传输/连接
  16. WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not
  17. dev c++ 中的Program received signal SIGSEGV Segmentation fault
  18. 周鸿伟鸿蒙系统,周鸿袆正式宣布!鸿蒙系统开源比较好,将全力支持华为新系统...
  19. git使用commit命令报错(please tell me who are you)
  20. Bean Validation完结篇:你必须关注的边边角角(约束级联、自定义约束、自定义校验器、国际化失败消息...)【享学Spring】

热门文章

  1. Python 标准库之 datetime
  2. 安装win下的Anaconda ----针对python3.6.4版本
  3. LeetCode简单题之距离顺序排列矩阵单元格
  4. 第一个SpringBoot程序(详细解析Grounp、Artifact等项目信息含义)
  5. 如何使用TensorCores优化卷积
  6. 2021年大数据HBase(二):HBase集群安装操作
  7. OPPO小游戏vConsole开启方法
  8. php连接mysql页面空白_求大神: php注册页面跳转出现空白页
  9. python 在字典插入值和修改字典value值的方法
  10. Java设计模式:单例模式