【问题标题】:LinAlgError when modeling ARIMA建模 ARIMA 时出现 LinAlgError
【发布时间】:2018-07-29 07:15:41
【问题描述】:

我在建模 ARIMA 和检查 MSE 时遇到了一个奇怪的问题。

这是我正在尝试的代码。

from sklearn.metrics import mean_squared_error
import sys

split_point = int(len(value_series) * 0.66)
train, test = value_series.values[0:split_point], value_series.values[split_point:]
history = [float(x) for x in train]
predictions = list()

for t in range(len(test)):
    try:
        model = ARIMA(history, order=(2,1,2))
        model_fit = model.fit(disp=0)
        output = model_fit.forecast()
        yhat = output[0]
        predictions.append(yhat)
        obs = test[t]
        history.append(obs)
        print('# %s predicted=%f, expected=%f' % (t, yhat, obs))
    except:
        print("Unexpected error:", sys.exc_info()[0])
        pass

error = mean_squared_error(test, predictions)
print('Test MSE: %.3f' % error)

我得到的错误是Unexpected error: <class 'numpy.linalg.linalg.LinAlgError'> 在线model_fit = model.fit(disp=0)。 该错误从第 282 位到列表长度为 343 的数据末尾出现,但我仍然找不到任何解决方案和原因。

无论如何,预测和测试的长度输出分别为 282 和 343。我不知道为什么预测无法附加 yhat,这意味着 arima.fit.forcast() 的输出无法分配 yhat...

+) 这就是SVD did not converge 错误。

【问题讨论】:

    标签: python statsmodels arima


    【解决方案1】:

    试试:

    X = value_series.values
    size = int(len(X) * 0.66)
    trn, tst = X[0:size], X[size:len(X)]
    hsty = [x.astype(float) for x in trn]
    pred = []
    for i in range(len(tst)):
        try:
            model = ARIMA(hsty, order=(3,1,1))
            model_fit = model.fit(disp=0, start_ar_lags = None)
            residuals = DataFrame(model_fit.resid)
            out = model_fit.forecast()
            yhat = out[0]
            predictions.append(yhat)
            obs = tst[i]
            hsty.append(obs)
            print('predicted=%f, expected=%f' % (yhat, obs))
        except:
            pass
    if len(tst)>len(pred):
        err = mean_squared_error(tst[:len(pred)], pred)
    else:
        err = mean_squared_error(tst, pred[:len(tst)])
    print(f'Test MSE : {err:.3f}')
    

    【讨论】:

    • 这个 'try.. except' 只是逃避了吸入的数据样本,这可能导致评估时错误的对齐。
    猜你喜欢
    • 2019-08-02
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多