блок try не выполняется - PullRequest
0 голосов
/ 04 мая 2020

Это мой код:

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. Я хотел бы знать, почему блок try не выполняется, из-за чего он выдает ошибку 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

1 Ответ

0 голосов
/ 04 мая 2020

Есть три возможности:

  1. pdq пусто, поэтому внешний for l oop завершается немедленно, а try никогда не выполняется.
  2. seasonal_pdq пуст, поэтому внутренний for l oop немедленно завершает работу, а try никогда не выполняется.
  3. try выполняется, но завершается перед переменной, от которой вы зависите on был привязан.

Элементарные методы отладки, которые вы могли бы использовать, чтобы сузить круг, были бы следующими:

  1. Напечатайте pdq, чтобы убедиться, что он не пустой.
  2. Напечатайте seasonal_pdq, чтобы убедиться, что он не пустой.
  3. Измените continue на raise, чтобы исключение возникало, а не игнорировалось. Таким образом, вы сможете увидеть, что это и из какой именно строки.
...