与 matplotlib 的二次拟合并没有真正起作用

问题描述 投票:0回答:2

我正在遵循数据拟合教程,当我刚刚将原始数据更改为我的数据时,拟合变得不是二次的。

my weird data fit

这是我的代码,非常感谢您的帮助:

# fit a second degree polynomial to the economic data
import numpy as np
from numpy import arange
from pandas import read_csv
from scipy.optimize import curve_fit
from matplotlib import pyplot

x = np.array([1,2,3,4,5,6])
y = np.array([1,4,12,29,54,104]) 

 
# define the true objective function
def objective(x, a, b, c):
    return a * x + b * x**2 + c
 
# load the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/longley.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
# choose the input and output variables

# curve fit
popt, _ = curve_fit(objective, x, y)
# summarize the parameter values
a, b, c = popt
print('y = %.5f * x + %.5f * x^2 + %.5f' % (a, b, c))
# plot input vs output
pyplot.scatter(x, y)
# define a sequence of inputs between the smallest and largest known inputs
x_line = arange(min(x), max(x), 1)
# calculate the output for the range
y_line = objective(x_line, a, b, c)
# create a line plot for the mapping function
pyplot.plot(x_line, y_line, '--', color='red')
pyplot.show()

我尝试了 python matplotlib 二次数据拟合,我期望二次函数,但视觉上它不是。

python numpy matplotlib scipy data-fitting
2个回答
0
投票

你的计算似乎是正确的。

我用 LMSE(最小均方误差)的简单线性回归来检查它。结果是:

对于较大的 y 值,拟合效果比对于较小的 y 值更好。这是 LMSE 拟合标准所期望的结果。也许这就是在您的软件中隐式实现的拟合标准。

但是对于不同的拟合标准,结果是不同的。例如,如果我们指定 LMSRE(最小均方相对误差),我们将获得:

对于较小的 y 值,拟合效果比对于较大的 y 值更好。这正是 LMSRE 所期望的。

当然,可以根据实际应用的情况指定其他拟合标准(例如LMAE)或许多其他标准。对于每个指定的拟合标准,拟合或多或少会有所不同,具体取决于点的分散程度。


0
投票

即使多项式回归正确,也可以通过指数模型方程获得更好的拟合:

© www.soinside.com 2019 - 2024. All rights reserved.