python中拟合_在Python中如何使用曲线拟合?

如果您首先目视检查传递给curve_fit()的数据的散点图,您将看到(如@Nikaido的回答)数据似乎位于一条直线上。下面是一个类似于@Nikaido提供的图形Python fitter:

rxqhn.pngimport numpy, scipy, matplotlib

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

# the "dtype=float" ensures floating point numbers,

# otherwise this would be a numpy array of integers

b = numpy.array([50,300,600,1000], dtype=float)

# these are already floating point numbers

si = numpy.log([426.0938, 259.2896, 166.8042, 80.9248])

# alias data names to match previous example code

xData = b

yData = si

def func(x, slope, offset):

return slope * x + offset

# same as the scipy defaults

initialParameters = numpy.array([1.0, 1.0])

# curve fit the test data

fittedParameters, pcov = curve_fit(func, xData, yData, initialParameters)

modelPredictions = func(xData, *fittedParameters)

absError = modelPredictions - yData

SE = numpy.square(absError) # squared errors

MSE = numpy.mean(SE) # mean squared errors

RMSE = numpy.sqrt(MSE) # Root Mean Squared Error, RMSE

Rsquared = 1.0 - (numpy.var(absError) / numpy.var(yData))

print('Parameters:', fittedParameters)

print('RMSE:', RMSE)

print('R-squared:', Rsquared)

print()

##########################################################

# graphics output section

def ModelAndScatterPlot(graphWidth, graphHeight):

f = plt.figure(figsize=(graphWidth/100.0, graphHeight/100.0), dpi=100)

axes = f.add_subplot(111)

# first the raw data as a scatter plot

axes.plot(xData, yData, 'D')

# create data for the fitted equation plot

xModel = numpy.linspace(min(xData), max(xData))

yModel = func(xModel, *fittedParameters)

# now the model as a line plot

axes.plot(xModel, yModel)

axes.set_xlabel('X Data') # X axis data label

axes.set_ylabel('Y Data') # Y axis data label

plt.show()

plt.close('all') # clean up after using pyplot

graphWidth = 800

graphHeight = 600

ModelAndScatterPlot(graphWidth, graphHeight)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值