尝试实现等效于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()不喜欢来自池/映射迭代的输入顺序,并且总是进入Expect:阶段。 (我可能是错的)。 这就是我正在努力的事情