多项式回归模型的曲线拟合在 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
.
给定如下数据集:
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
.