numpy 尽管种子数固定,但TSF在不同的计算机上给出不同的结果

bmp9r5qi  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个时间序列预测应用程序,其中的算法可以从2个选项中选择:

  • sklearn线性回归
  • 统计模型ARIMA与SARIMAX(基于数据的季节性)

初始化类对象并调用fit函数时,没有属性来设置seed,因此我将NumPy随机seed设置为固定seed:np.random.seed(123)
此种子在应用程序的第一个入口点中全局设置。
问题是预测的结果在不同的机器之间是不同的,尽管我们在依赖于Pipfile的Docker Image中运行,所以所有的依赖项都有相同的版本+python版本也是相同的(3.9):

numpy = "==1.22.3"
scikit-learn = "==1.1.1"
statsmodels = "==0.13.2"
scipy = "==1.9.3"

预测值的差异对于我们应用这两种算法也很重要。
| 本地Windows 10| Azure |
| - -|- -|
| 小行星8499|小行星12693|
| 小行星140277|小行星41278|
有人能支持吗?

更新代码片段+示例可在此处找到:

第一次

t2a7ltrp

t2a7ltrp1#

感谢@NickODell的评论,问题已解决,如下所示:

  1. ARIMA/SARIMAX模型
    对于ARIMA/SARIMAX模型,应使用特定种子定义随机状态,然后将其传递给pm.auto_arima函数。原因是pm.auto_arima使用train_test_split函数(通常使用种子)来查找最佳模型。
random_state = np.random.RandomState(123)
smodel = pm.auto_arima(
        df_historical.value,
        start_p=1,
        start_q=1,
        test="adf",
        max_p=3,
        max_q=3,
        m=12,
        start_P=0,
        seasonal=True,
        d=None,
        D=1,
        trace=True,
        error_action="ignore",
        suppress_warnings=True,
        stepwise=True,
        random_state=random_state
    )

mod = SARIMAX(
        historical_data,
        order=smodel.order,
        seasonal_order=smodel.seasonal_order,
        enforce_stationarity=False,
        enforce_invertibility=False
    )
best_model = mod.fit(disp=0)

1.线性回归
对于线性回归,通过停用截距拟合来解决该问题,因为它包含许多平均和移位计算,并且这导致不同操作系统之间的预测值中的一些差异。

regr = LinearRegression(fit_intercept=False)
regr.fit(x, y)

相关问题