用池进行多处理以在python中实现等效的auto.arima()

时间:2018-10-09 19:41:21

标签: python-3.x time-series python-multiprocessing

尝试实现等效于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:阶段。 (我可能是错的)。 这就是我正在努力的事情

0 个答案:

没有答案