statsmodels 笔记:自回归模型 AutoReg

理论部分“算法笔记:ARIMA_UQI-LIUWJ的博客-CSDN博客

1 基本用法

class statsmodels.tsa.ar_model.AutoReg(
    endog, 
    lags, 
    trend='c', 
    seasonal=False, 
    exog=None, 
    hold_back=None, 
    period=None, 
    missing='none', 
    *, 
    deterministic=None
)

2  参数说明

endog 一维序列,需要自回归的因变量
lags

{ Noneintlist[int]}

包含一个整数或滞后指数列表。

例如,[1,4]只包含滞后1和4,而4则包含滞后1、2、3和4。

None排除所有AR滞后,且行为一致为0。

3 举例说明

3.1 训练模型

import pandas as pd
import numpy as np
from statsmodels.tsa.ar_model import AutoReg
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error as MSE

df = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/daily-min-temperatures.csv',
				 index_col=0, parse_dates=True)

x = df.values
lag=[1,3,7]
#滞后集,表示当前时刻的时序信号会受到多少过去时刻时序信号的影响。

train, test = x[:-max(lag)], x[-max(lag):]  
# 把模型数据分为train和test,分别用来训练模型和对比模型预测结果


model_fit = AutoReg(
    train,
    lag,
    old_names=False).fit()
#训练模型

print(model_fit.params)
#[1.3344155  0.61595801 0.10489587 0.15938696]
'''
从前往后分别是:
    偏差,
    一个时间片之前数据的影响,
    3个时间片之前数据的影响,
    7个时间片之前数据的影响
    (和lag顺序一致)
'''

3.2 测试模型

history = train[-max(lag):]   
history = np.hstack(history).tolist()  
print(history)
#[17.2, 14.7, 15.4, 13.1, 13.2, 13.9, 10.0]
test = np.hstack(test).tolist()
print(test)
#test = np.hstack(test).tolist()
#[12.9, 14.6, 14.0, 13.6, 13.5, 15.7, 13.0]
redictions = []
for t in range(len(test)):
    #逐时间片地预测

	late = history[-max(lag):]
    #本轮时间片所能看到的过去的时序信号

	yhat = params[0]
    #params[0]是偏移量

	for i in range(len(lag)):
		yhat += params[i+1] * late[max(lag)-lag[i]]
        #参数乘以对应的过去时序信号
        
	predictions.append(yhat)
	obs = test[t]
	history.append(obs)
    #当前的test信号也作为我们已经看过的过去信号

print(np.mean((np.array(test) - np.array(predictions))**2))  
#1.5267307279954954
# 得到mean_squared_error, MSE

plt.plot(test)
plt.plot(predictions, color='r')
plt.show()

Guess you like

Origin blog.csdn.net/qq_40206371/article/details/121103377