Многопроцессорная обработка с пулом для реализации эквивалента auto.arima () в python - PullRequest
0 голосов
/ 09 октября 2018

После попытки реализовать эквивалент 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 () не любит порядок ввода из итерации пула / карты и всегда переходит к фазе Ожидает:.(я могу ошибаться).Это то, с чем я борюсь

...