如何使用 Dask 和 Arima 并行化一个简单的功能?

时间:2021-08-01 17:17:32

标签: python dask arima

我正在尝试使用 Dask 并行化一个简单的函数,以尝试使事情更快……但我很挣扎!有人可以帮忙吗?这是我当前的代码:

order_aic_bic=[]

@delayed
def test(df):
    model = ARIMA(df, order=(p, d, q))
    results = model.fit()
    return results

for p in range(10):
    for q in range(10):
        try:
            a = test(ir)
            order_aic_bic.append((p, d, q, a.aic, a.bic))
        except:
            print(p, d, q, None, None)

graph = delayed()(order_aic_bic)
lst = graph.compute()

上面的代码给出了警告/错误“warnings.warn(最大似然优化失败”并且比原始代码花费的时间更长。

1 个答案:

答案 0 :(得分:0)

您可能希望将 p, d, q 显式传递给 test 函数。否则,我认为不能保证他们会使用适当的值。

此外,不需要 try/except 块,因为总是会返回惰性值并且不会调用 except 块(实际上,您试图从惰性模块中获取 .aic,因此这会导致错误,但如果您的 try 块不包含该错误,则不需要 try/except)。

from dask import delayed, compute

@delayed(nout=2)
def test(df, p, d, q):
    model = ARIMA(df, order=(p, d, q))
    results = model.fit()
    return results.aic, results.bic


order_aic_bic = []

for p in range(10):
    for q in range(10):
        a = test(ir)
        order_aic_bic.append((p, d, q, *a))

final = compute(order_aic_bic)