<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何在 Python 中保存 ARIMA 時間序列預測模型 > 原文: [https://machinelearningmastery.com/save-arima-time-series-forecasting-model-python/](https://machinelearningmastery.com/save-arima-time-series-forecasting-model-python/) 自回歸整合移動平均模型(ARIMA)是一種流行的時間序列分析和預測線性模型。 [statsmodels 庫](http://statsmodels.sourceforge.net/)提供了用于 Python 的 ARIMA 實現。 ARIMA 模型可以保存到文件中,以便以后用于對新數據進行預測。當前版本的 statsmodels 庫中存在一個錯誤,該錯誤會阻止加載已保存的模型。 在本教程中,您將了解如何診斷和解決此問題。 讓我們開始吧。 ![How to Save an ARIMA Time Series Forecasting Model in Python](https://img.kancloud.cn/6d/b7/6db73adb8f8e6485d5564843e436f762_640x480.jpg) 如何在 Python 中保存 ARIMA 時間序列預測模型 照片由 [Les Chatfield](https://www.flickr.com/photos/elsie/15583121591/) 保留,保留一些權利。 ## 每日女性出生數據集 首先,讓我們看一下標準時間序列數據集,我們可以用它來理解 statsmodels ARIMA 實現的問題。 這個每日女性出生數據集描述了 1959 年加利福尼亞州每日女性出生的數量。 單位是計數,有 365 個觀測值。數據集的來源歸功于 Newton(1988)。 [您可以從 DataMarket 網站](https://datamarket.com/data/set/235k/daily-total-female-births-in-california-1959)了解更多信息并下載數據集。 下載數據集并將其放在當前工作目錄中,文件名為“ _daily-total-female-births.csv_ ”。 下面的代碼片段將加載并繪制數據集。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) series.plot() pyplot.show() ``` 運行該示例將數據集作為 Pandas Series 加載,然后顯示數據的線圖。 ![Daily Total Female Births Plot](https://img.kancloud.cn/4f/7d/4f7d7462b504c7b52081b73827b67cb5_800x600.jpg) 每日總女性出生情節 ## Python 環境 確認您使用的是 [statsmodels 庫](http://statsmodels.sourceforge.net/)的最新版本。 你可以通過運行下面的腳本來做到這一點: ```py import statsmodels print('statsmodels: %s' % statsmodels.__version__) ``` 運行腳本應生成顯示 statsmodels 0.6 或 0.6.1 的結果。 ```py statsmodels: 0.6.1 ``` 您可以使用 Python 2 或 3。 **更新**:我可以確認 statsmodels 0.8 中仍然存在故障并導致錯誤消息: ```py AttributeError: 'ARIMA' object has no attribute 'dates' ``` ## ARIMA 模型保存 Bug 我們可以在 Daily Female Births 數據集上輕松訓練 ARIMA 模型。 下面的代碼片段在數據集上訓練 ARIMA(1,1,1)。 [model.fit()](http://statsmodels.sourceforge.net/stable/generated/statsmodels.tsa.arima_model.ARIMA.fit.html#statsmodels.tsa.arima_model.ARIMA.fit)函數返回一個 [ARIMAResults](http://statsmodels.sourceforge.net/stable/generated/statsmodels.tsa.arima_model.ARIMAResults.html) 對象,我們可以在其上調用 [save()](http://statsmodels.sourceforge.net/stable/generated/statsmodels.tsa.arima_model.ARIMAResults.save.html)將模型保存到文件和 [load()](http://statsmodels.sourceforge.net/stable/generated/statsmodels.tsa.arima_model.ARIMAResults.load.html) 以后加載它。 ```py from pandas import Series from statsmodels.tsa.arima_model import ARIMA from statsmodels.tsa.arima_model import ARIMAResults # load data series = Series.from_csv('daily-total-female-births.csv', header=0) # prepare data X = series.values X = X.astype('float32') # fit model model = ARIMA(X, order=(1,1,1)) model_fit = model.fit() # save model model_fit.save('model.pkl') # load model loaded = ARIMAResults.load('model.pkl') ``` 運行此示例將訓練模型并將其保存到文件中沒有問題。 嘗試從文件加載模型時將報告錯誤。 ```py Traceback (most recent call last): File "...", line 16, in <module> loaded = ARIMAResults.load('model.pkl') File ".../site-packages/statsmodels/base/model.py", line 1529, in load return load_pickle(fname) File ".../site-packages/statsmodels/iolib/smpickle.py", line 41, in load_pickle return cPickle.load(fin) TypeError: __new__() takes at least 3 arguments (1 given) ``` 具體來說,注意這一行: ```py TypeError: __new__() takes at least 3 arguments (1 given) ``` 到目前為止一切順利,我們如何解決它? ## ARIMA 模型保存 Bug 解決方法 Zae Myung Kim 于 2016 年 9 月發現了這個錯誤,并報告了這個錯誤。 你可以在這里讀到所有和它有關的: * [BUG:實現 __getnewargs __()方法取消](https://github.com/statsmodels/statsmodels/pull/3217) 發生該錯誤是因為 [pickle](https://docs.python.org/2/library/pickle.html) (用于序列化 Python 對象的庫)所需的函數尚未在 statsmodels 中定義。 必須在保存之前在 ARIMA 模型中定義函數 [__getnewargs__](https://docs.python.org/2/library/pickle.html#object.__getnewargs__) ,該函數定義構造對象所需的參數。 我們可以解決這個問題。修復涉及兩件事: 1. 定義適合 ARIMA 對象的 ___getnewargs___ 函數的實現。 2. 將新功能添加到 ARIMA。 值得慶幸的是,Zae Myung Kim 在他的錯誤報告中提供了該函數的示例,因此我們可以直接使用它: ```py def __getnewargs__(self): return ((self.endog),(self.k_lags, self.k_diff, self.k_ma)) ``` Python 允許我們[猴子補丁](https://en.wikipedia.org/wiki/Monkey_patch)一個對象,甚至像 statsmodels 這樣的庫。 我們可以使用賦值在現有對象上定義新函數。 我們可以為 ARIMA 對象上的 ___getnewargs___ 函數執行此操作,如下所示: ```py ARIMA.__getnewargs__ = __getnewargs__ ``` 下面列出了使用 Monkey 補丁在 Python 中訓練,保存和加載 ARIMA 模型的完整示例: ```py from pandas import Series from statsmodels.tsa.arima_model import ARIMA from statsmodels.tsa.arima_model import ARIMAResults # monkey patch around bug in ARIMA class def __getnewargs__(self): return ((self.endog),(self.k_lags, self.k_diff, self.k_ma)) ARIMA.__getnewargs__ = __getnewargs__ # load data series = Series.from_csv('daily-total-female-births.csv', header=0) # prepare data X = series.values X = X.astype('float32') # fit model model = ARIMA(X, order=(1,1,1)) model_fit = model.fit() # save model model_fit.save('model.pkl') # load model loaded = ARIMAResults.load('model.pkl') ``` 現在運行該示例成功加載模型而沒有錯誤。 ## 摘要 在這篇文章中,您了解了如何解決 statsmodels ARIMA 實現中的一個錯誤,該錯誤阻止您在文件中保存和加載 ARIMA 模型。 你發現了如何編寫一個猴子補丁來解決這個 bug,以及如何證明它確實已被修復。 您是否在項目中使用此解決方法? 請在下面的評論中告訴我。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看