如何解决多项式回归模型的曲线拟合在 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,c = popt
print('y = %.5f * x + %.5f * x^2 + %.5f' % (a,c))
pyplot.scatter(x,y)
x_line = arange(min(x),max(x),1)
y_line = objective(x_line,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(2015,*popt)
给出 13.723435783853802
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。