超出数据范围的回归扩展
我正在使用Matplotlib和Numpy来绘制时间序列图上的线性回归,以预测未来的趋势。
生成回归线似乎并不特别困难,但让回归线延伸到最后一个数据点之外却有点挑战:
我该如何让回归线延伸呢?
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)