После попытки реализовать эквивалент Python для auto.arima (), я сузил свой подход / поиск до следующего фрагмента кода:
import multiprocessing as mp
from functools import partial
import numpy as np
import statsmodels
import pandas as pd
def get_aic_bic(order,series):
aic=np.nan
bic=np.nan
try:
arima_mod=statsmodels.tsa.arima_model.ARIMA(series,order=order,freq='D').fit(transparams=True,method='css')
aic=arima_mod.aic
bic=arima_mod.bic
print(order,aic,bic)
except:
pass
return aic,bic
def get_PDQ_parallel(data,n_jobs=4):
p_val=1
q_val=1
d_vals=1
pdq_vals=[ (p,d,q) for p in range(p_val) for d in range(d_vals) for q in
range(q_val)]
get_aic_bic_partial=partial(get_aic_bic,series=data)
p = mp.Pool(processes=n_jobs)
res=p.map(get_aic_bic_partial,pdq_vals)
p.close()
Здесь pdq_vals - это 2D-список, и я столкнулся спроблема, чтобы заставить этот фрагмент кода работать.Поскольку я использую блокнот jupyter, я сохранил этот код в отдельном скрипте Python (parallel.py) и вызвал его с помощью другого блокнота jupyter
import parallel
lis_1 = parallel.get_PDQ_parallel(test_table)
, где test_table - временной ряд.При отладке кода с использованием pdb, похоже, что функция fn get_aic_bic () не любит порядок ввода из итерации пула / карты и всегда переходит к фазе Ожидает:.(я могу ошибаться).Это то, с чем я борюсь