我使用Matplotlib和Numpy在时间序列图上绘制线性回归,以预测未来的趋势。生成回归似乎并不特别困难,但要让回归线延伸到最后一个数据点之外却很有挑战性:
我如何扩展回归?
9nvpjoqh1#
当您评估回归模型时,您正在预测输入日期的提交值。要预测更大的范围,您需要增加评估模型的日期范围。我也会使用np.polyval而不是列表解析,只是因为它更紧凑:
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)
s4chpxco2#
如果你想将回归线延伸到数据之外,例如,覆盖整个x范围,你可以这样做(只需更改最后3条线):
import numpy as np X=np.arange(xmin, xmax, 50) line=beta1*X**2+beta2*X+beta3 plt.plot(X, line, 'r-', lw=5.)
2条答案
按热度按时间9nvpjoqh1#
当您评估回归模型时,您正在预测输入日期的提交值。要预测更大的范围,您需要增加评估模型的日期范围。我也会使用
np.polyval
而不是列表解析,只是因为它更紧凑:s4chpxco2#
如果你想将回归线延伸到数据之外,例如,覆盖整个x范围,你可以这样做(只需更改最后3条线):