超出数据范围的回归扩展

1 投票
2 回答
4622 浏览
提问于 2025-04-17 22:02

我正在使用Matplotlib和Numpy来绘制时间序列图上的线性回归,以预测未来的趋势。

生成回归线似乎并不特别困难,但让回归线延伸到最后一个数据点之外却有点挑战:

在iPython Notebook中显示线性回归的时间序列

我该如何让回归线延伸呢?

2 个回答

0

如果你想把回归线延伸到数据之外,比如说覆盖整个x轴的范围,你可以这样做(只需要修改最后三行代码):

import numpy as np
X=np.arange(xmin, xmax, 50)
line=beta1*X**2+beta2*X+beta3
plt.plot(X, line, 'r-', lw=5.)
4

当你在评估你的回归模型时,其实是在预测某个输入日期的提交数量。为了预测更广泛的范围,你需要扩大你评估模型的日期范围。同时,我建议使用 np.polyval,而不是用列表推导式,因为它更简洁:

# Generate data like the question
observed_dates = pd.date_range("jan 2004", "april 2013", freq="M")
submissions = np.random.normal(5000, 100, len(observed_dates))
submissions += np.arange(len(observed_dates)) * 10
submissions[::12] += 800

# Plot the observed data
plt.plot(observed_dates, submissions, marker="o")

# Fit a model and predict future dates
predict_dates = pd.date_range("jan 2004", "jan 2020", freq="M")
model = np.polyfit(observed_dates.asi8, submissions, 1)
predicted = np.polyval(model, predict_dates.asi8)

# Plot the model
plt.plot(predict_dates, predicted, lw=3)

enter image description here

撰写回答