Python 3.x numpy多边形拟合的问题
出于某种原因,我的polyfit离我太远了,我不明白为什么会这样。我的散点图看起来很正常 我怎样才能解决这个问题?这是我的密码:Python 3.x numpy多边形拟合的问题,python-3.x,numpy,Python 3.x,Numpy,出于某种原因,我的polyfit离我太远了,我不明白为什么会这样。我的散点图看起来很正常 我怎样才能解决这个问题?这是我的密码: def plot(data, x_axis, y_axis, title): x = data[0] y = data[1] ## Plot data plt.figure(figsize=(8,4)) plt.scatter(x, y) idx = np.isfinite(x) & np.isfinit
def plot(data, x_axis, y_axis, title):
x = data[0]
y = data[1]
## Plot data
plt.figure(figsize=(8,4))
plt.scatter(x, y)
idx = np.isfinite(x) & np.isfinite(y)
plt.plot(np.poly1d(np.polyfit(x[idx], y[idx], 3)))
## Format graph
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.gca().xaxis.set_major_locator(mdates.YearLocator(3))
plt.gcf().autofmt_xdate()
## Define labels
plt.xlabel(x_axis)
plt.ylabel(y_axis)
plt.title(title)
## Graph data
plt.show()
如果我需要链接我的数据,那么我可以。内容太多,无法在这里发布
检查
print(x[idx])
print(y[idx])
显示正确的值,但没有显示任何错误
编辑:
我已经想出了解决办法。我没有正确使用polyfit
idx = np.isfinite(x) & np.isfinite(y)
avgTrend = np.poly1d(np.polyfit(x[idx], y[idx], 3))
plt.plot(x, avgTrend(x), color='red')
问题似乎在于多项式的次数。对于如此多的数据点,可能根本不可能拟合一个好的3次多项式。您可以尝试更高的阶数(不太可能以您想要的方式工作),也可以尝试样条函数 例如,您可以尝试实现平滑样条线的csaps包,我可以推荐它
希望这有帮助。问题似乎出在多项式的次数上。对于如此多的数据点,可能根本不可能拟合一个好的3次多项式。您可以尝试更高的阶数(不太可能以您想要的方式工作),也可以尝试样条函数 例如,您可以尝试实现平滑样条线的csaps包,我可以推荐它
希望这有帮助我觉得应该删除1983年的数据点,因为它们看起来确实是异常值,但我现在不想删除它们。我没有做太多的研究,所以1983年可能会有一些重大事件。我觉得我应该删除1983年的数据点,因为它们看起来确实是异常值,但我现在不想删除它们。我没有做太多的研究,所以在1983年可能会有一些重大事件。我最终使它发挥了作用。我想问题是,我没有传递日期,所以这就是为什么趋势线没有与散点图正确对齐。我在底部上传了我的解决方案,并附上了一张图表。最后我让它开始工作。我想问题是,我没有传递日期,所以这就是为什么趋势线没有与散点图正确对齐。我在底部上传了我的解决方案,并附上了一张图表。