多项式回归模型的曲线拟合在 Python 中给出了不正确的输出

Curve-fitting for polynomial regression model gives incorrect ouput in Python

给定如下数据集:

    year  population
0   1998       12.42
1   1999       12.53
2   2000       12.63
3   2001       12.72
4   2002       12.80
5   2003       12.88
6   2004       12.96
7   2005       13.04
8   2006       13.11
9   2007       13.18
10  2008       13.25
11  2009       13.31
12  2010       13.38
13  2011       13.44
14  2012       13.51
15  2013       13.57
16  2014       13.64
17  2015       13.71
18  2016       13.79
19  2017       13.86
20  2018       13.93
21  2019       13.98

基于 this link

中的代码
import pandas as pd
from numpy import arange
from scipy.optimize import curve_fit
from matplotlib import pyplot
import numpy as np

data = df.values
x, y = data[:, 0], data[:, 1]

def objective(x, a, b, c):
    return a * x + b * x ** 2 + c

popt, _ = curve_fit(objective, x, y)
a, b, c = popt
print('y = %.5f * x + %.5f * x^2 + %.5f' % (a, b, c))
pyplot.scatter(x, y)
x_line = arange(min(x), max(x), 1)
y_line = objective(x_line, a, b, c)
pyplot.plot(x_line, y_line, '--', color='red')
pyplot.show()

输出:

y = 2.58436 * x + -0.00063 * x^2 + -2654.41790

但是当我用x = 2015测试时,公式将是2.58436 * 2015 + -0.00063 * 2015^2 + -2654.41790,它给出的结果是-4.87425,这显然不是我预期的正确拟合结果。

谁能帮我弄清楚为什么会出现这个错误?谢谢。

您的公式不正确,因为您将系数四舍五入到小数点后第五位。用精确的系数计算 objective,即 objective(2015, *popt) 给出 13.723435783853802.