这是我的代码。
p = range(0,3)
q = range(0,3)
d = range(0,3)
s = range(30,31)
P =range(0,1)
D = range(1,2)
Q = range(0,1)
lowest_aic= None
lowest_parm = None
lowest_param_seasonal = None
pdq = list(itertools.product(p, d, q))
seasonal_pdq = list(itertools.product(P,D,Q,s))
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
mod = sm.tsa.statespace.SARIMAX(data,order=param,seasonal_order=param_seasonal)
results = mod.fit()
current_aic = results.aic
if (lowest_aic == None):
lowest_aic = results.aic
if (current_aic <= lowest_aic):
lowest_aic = current_aic
lowest_parm = param
lowest_param_seasonal = param_seasonal
#print('SARIMA{}x{} - AIC:{}'.format(param, param_seasonal, results.aic))
print('SARIMA{},{} - AIC:{}'.format(param, param_seasonal, results.aic))
except:
continue
print('SARIMA{}x{} - AIC:{}'.format(param, param_seasonal, results.aic))
syhat_sar_c = results.predict(len(df), len(df)+6, typ='levels',dynamic=False)
print(np.array(syhat_sar))
我试图为我的SARIMA模型实现一个网格搜索,我想知道为什么尝试块没有被执行,因为它抛出了UnboundLocal错误。
如果能详细解释一下就更好了。
这是我运行这段代码时得到的回溯。
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-12-2669d247586e> in <module>()
35
36
---> 37 print('SARIMA{}x{} - AIC:{}'.format(param, param_seasonal, results.aic))
38 syhat_sar_c = results.predict(len(df), len(df)+6, typ='levels',dynamic=False)
39 print(np.array(syhat_sar))
NameError: name 'results' is not defined
有三种可能。
pdq
是空的,所以外层的 for
循环立即退出,并且 try
永远不会被执行。seasonal_pdq
是空的,所以内部的 for
循环立即退出,并且 try
永远不会被执行。try
被执行,但它在你所依赖的变量被绑定之前就终止了。你可以使用基本的调试技术来缩小这个范围。
pdq
以确保它不是空的。seasonal_pdq
以确保它不是空的。continue
到 raise
以便引发异常而不是忽略。 这样你就可以看到它是什么,到底来自哪一行。