python 幂数拟合及拟合度计算

  有时候对数据的分析处理,需要进行曲线拟合,python提供了丰富的工具,其中scipy中的curve_fit可以用来进行幂数拟合或者指数拟合等各种类型的拟合。

  先定义好要拟合的函数形式target_func,然后调用函数popt, pcov = curve_fit(target_func, xdata, ydata)可以返回target_func中的参数,参数存储在popt数组中。

  拟合度衡量的是拟合函数整体的拟合度,R²最大值为1,越接近于1,说明函数的拟合度越好,公式表达为R²=1-SSres/SStot。SSres为残差平方和,SStot为去掉均值后的平方和。

计算过程如下:

  mean               为ydata的均值

  

    fi为根据拟合函数计算出来的y值

  rsquared

  如下代码给定了一组x,y数据,使用函数 y = a * x^b 来拟合这组数据,并计算拟合度。最后打印出了拟合函数的参数a、b,及拟合度

from scipy.optimize import curve_fit
import numpy as np

xdata = [0.1738, 0.0325, 0.0135, 0.0058, 0.0028]
ydata = [11.313, 15.953, 21.599, 33.212, 54.098]

### define the fit functions, y = a * x^b ###
def target_func(x, a, b):
    return a*(x**b)

### curve fit ###
popt, pcov  = curve_fit(target_func, xdata, ydata)

### Calculate R Square ###
calc_ydata = [target_func(i, popt[0], popt[1]) for i in xdata]
res_ydata  = np.array(ydata) - np.array(calc_ydata)
ss_res     = np.sum(res_ydata**2)
ss_tot     = np.sum((ydata - np.mean(ydata))**2)
r_squared  = 1 - (ss_res / ss_tot)

### Output results ###
print "a = %f  b = %f   R2 = %f"%(popt[0], popt[1], r_squared)
print ydata, calc_ydata

输出结果为:a = 2.761469  b = -0.499174   R2 = 0.965864, 即 y = 2.76 * x^(-0.499),拟合度高达96.6%。

  • 12
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITRonnie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值