<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 如何使用 Python 對 ARIMA 模型進行手動預測 > 原文: [https://machinelearningmastery.com/make-manual-predictions-arima-models-python/](https://machinelearningmastery.com/make-manual-predictions-arima-models-python/) 自動回歸集成移動平均模型或 ARIMA 模型對初學者來說似乎有點嚇人。 拉回方法的一個好方法是使用訓練有素的模型手動進行預測。這表明 ARIMA 是一個核心的線性回歸模型。 使用合適的 ARIMA 模型進行手動預測也可能是項目中的一項要求,這意味著您可以從擬合模型中保存系數,并將它們用作您自己的代碼中的配置來進行預測,而無需在生產中使用繁重的 Python 庫環境。 在本教程中,您將了解如何使用 Python 中經過訓練的 ARIMA 模型進行手動預測。 具體來說,您將學到: * 如何使用自回歸模型進行手動預測。 * 如何使用移動平均模型進行手動預測。 * 如何使用自回歸集成移動平均模型進行預測。 讓我們潛入。 **更新**:您可能會發現此帖子很有用: * [如何使用 Python 中的 ARIMA 進行樣本外預測](http://machinelearningmastery.com/make-sample-forecasts-arima-python/) ![How to Make Manual Predictions for ARIMA Models with Python](https://img.kancloud.cn/01/01/01019ddec99ff7bb1f0cf968f4806119_640x396.jpg) 如何使用 Python 照片制作 ARIMA 模型的手動預測照片由 [Bernard Spragg 撰寫。 NZ](https://www.flickr.com/photos/volvob12b/10133164586/) ,保留一些權利。 ## 最低每日溫度數據集 該數據集描述了澳大利亞墨爾本市 10 年(1981-1990)的最低日常溫度。 單位為攝氏度,有 3,650 個觀測值。數據來源被稱為澳大利亞氣象局。 [您可以從數據市場網站](https://datamarket.com/data/set/2324/daily-minimum-temperatures-in-melbourne-australia-1981-1990)了解更多信息并下載數據集。 下載數據集并將其放入當前工作目錄,文件名為“ _daily-minimum-Temperats.sv_ ”。 **注意**:下載的文件包含一些問號(“?”)字符,必須先將其刪除才能使用數據集。在文本編輯器中打開文件并刪除“?”字符。同時刪除文件中的任何頁腳信息。 下面的示例演示了如何將數據集作為 Pandas Series 加載并繪制已加載的數據集。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-minimum-temperatures.csv', header=0) series.plot() pyplot.show() ``` 運行該示例會創建時間序列的折線圖。 ![Minimum Daily Temperatures Dataset Plot](https://img.kancloud.cn/4f/30/4f30c95f7611e9a7bbbb080410ec5623_800x600.jpg) 最低每日溫度數據集圖 ## ARIMA 測試設置 我們將使用一致的測試工具來擬合 ARIMA 模型并評估其預測。 首先,將加載的數據集拆分為訓練和測試數據集。大部分數據集用于擬合模型,最后 7 個觀察值(一周)作為測試數據集保留以評估擬合模型。 前瞻性驗證或滾動預測方法使用如下: 1. 迭代測試數據集中的每個時間步。 2. 在每次迭代中,對所有可用的歷史數據訓練新的 ARIMA 模型。 3. 該模型用于對第二天進行預測。 4. 存儲預測并從測試集中檢索“真實”觀察并將其添加到歷史中以供在下一次迭代中使用。 5. 最后通過計算與測試數據集中的預期值相比所做的所有預測的均方根誤差(RMSE)來總結模型的表現。 開發了簡單的 AR,MA,ARMA 和 ARMA 模型。它們未經優化,用于演示目的。通過一些調整,您一定能夠獲得更好的表現。 使用來自 statsmodels Python 庫的 ARIMA 實現,并且從擬合模型返回的 ARIMAResults 對象中提取 AR 和 MA 系數。 ARIMA 模型通過 [predict()](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.arima_model.ARIMAResults.predict.html)和 [forecast()](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.arima_model.ARIMAResults.forecast.html)函數支持預測。 不過,我們將使用學習系數在本教程中進行手動預測。 這很有用,因為它表明訓練的 ARIMA 模型所需的全部是系數。 ARIMA 模型的 statsmodels 實現中的系數不使用截距項。這意味著我們可以通過獲取學習系數和滯后值(在 AR 模型的情況下)和滯后殘差(在 MA 模型的情況下)的點積來計算輸出值。例如: ```py y = dot_product(ar_coefficients, lags) + dot_product(ma_coefficients, residuals) ``` 可以從 aARIMAResults 對象訪問學習 ARIMA 模型的系數,如下所示: * **AR 系數**:model_fit.arparams * **MA 系數**:model_fit.maparams 我們可以使用這些檢索到的系數來使用以下手冊 _predict()_ 函數進行預測。 ```py def predict(coef, history): yhat = 0.0 for i in range(1, len(coef)+1): yhat += coef[i-1] * history[-i] return yhat ``` 作為參考,您可能會發現以下資源非常有用: * [ARIMA API 文檔](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.arima_model.ARIMA.html) * [ARIMAResults API 文檔](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.arima_model.ARIMAResults.html) * [ARIMA statsmodels 源代碼](https://github.com/statsmodels/statsmodels/blob/master/statsmodels/tsa/arima_model.py) 讓我們看一些簡單但具體的模型,以及如何使用此測試設置進行手動預測。 ## 自回歸模型 自回歸模型或 AR 是滯后觀察的線性回歸模型。 具有滯后 _k_ 的 AR 模型可以在 ARIMA 模型中指定如下: ```py model = ARIMA(history, order=(k,0,0)) ``` 在此示例中,我們將使用簡單的 AR(1)進行演示。 進行預測需要我們從擬合模型中檢索 AR 系數,并將它們與觀測值的滯后一起使用,并調用上面定義的自定義 _predict()_ 函數。 下面列出了完整的示例。 ```py from pandas import Series from matplotlib import pyplot from statsmodels.tsa.arima_model import ARIMA from sklearn.metrics import mean_squared_error from math import sqrt def predict(coef, history): yhat = 0.0 for i in range(1, len(coef)+1): yhat += coef[i-1] * history[-i] return yhat series = Series.from_csv('daily-minimum-temperatures.csv', header=0) X = series.values size = len(X) - 7 train, test = X[0:size], X[size:] history = [x for x in train] predictions = list() for t in range(len(test)): model = ARIMA(history, order=(1,0,0)) model_fit = model.fit(trend='nc', disp=False) ar_coef = model_fit.arparams yhat = predict(ar_coef, history) predictions.append(yhat) obs = test[t] history.append(obs) print('>predicted=%.3f, expected=%.3f' % (yhat, obs)) rmse = sqrt(mean_squared_error(test, predictions)) print('Test RMSE: %.3f' % rmse) ``` 請注意,ARIMA 實施將自動為時間序列中的趨勢建模。這為回歸方程式增加了一個常數,我們不需要用于演示目的。我們通過將 _fit()_ 函數中的'trend'參數設置為' _nc_ '為' _no constant_ '來關閉這個便利性。 [fit()](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.arima_model.ARIMA.fit.html)函數還輸出了許多詳細消息,我們可以通過將' _disp_ '參數設置為' _False_ '來關閉。 運行該示例將每次迭代打印預測值和期望值 7 天。印刷的最終 RMSE 顯示該簡單模型的平均誤差約為 1.9 攝氏度。 ```py >predicted=9.738, expected=12.900 >predicted=12.563, expected=14.600 >predicted=14.219, expected=14.000 >predicted=13.635, expected=13.600 >predicted=13.245, expected=13.500 >predicted=13.148, expected=15.700 >predicted=15.292, expected=13.000 Test RMSE: 1.928 ``` 嘗試使用不同順序的 AR 模型,例如 2 個或更多。 ## 移動平均模型 移動平均模型或 MA 是滯后殘差的線性回歸模型。 可以在 ARIMA 模型中指定滯后為 k 的 MA 模型,如下所示: ```py model = ARIMA(history, order=(0,0,k)) ``` 在這個例子中,我們將使用簡單的 MA(1)進行演示。 如上所述,進行預測需要我們從擬合模型中檢索 MA 系數,并將它們與剩余誤差值的滯后一起使用,并調用上面定義的自定義 _predict()_ 函數。 訓練期間的殘留誤差存儲在 ARIMA 模型中 _ARIMAResults_ 對象的' _resid_ '參數下。 ```py model_fit.resid ``` 下面列出了完整的示例。 ```py from pandas import Series from matplotlib import pyplot from statsmodels.tsa.arima_model import ARIMA from sklearn.metrics import mean_squared_error from math import sqrt def predict(coef, history): yhat = 0.0 for i in range(1, len(coef)+1): yhat += coef[i-1] * history[-i] return yhat series = Series.from_csv('daily-minimum-temperatures.csv', header=0) X = series.values size = len(X) - 7 train, test = X[0:size], X[size:] history = [x for x in train] predictions = list() for t in range(len(test)): model = ARIMA(history, order=(0,0,1)) model_fit = model.fit(trend='nc', disp=False) ma_coef = model_fit.maparams resid = model_fit.resid yhat = predict(ma_coef, resid) predictions.append(yhat) obs = test[t] history.append(obs) print('>predicted=%.3f, expected=%.3f' % (yhat, obs)) rmse = sqrt(mean_squared_error(test, predictions)) print('Test RMSE: %.3f' % rmse) ``` 運行該示例將每次迭代打印預測值和期望值 7 天,并通過匯總所有預測的 RMSE 結束。 該模型的技能并不是很好,您可以將其作為一個機會,與其他訂單一起探索 MA 模型,并使用它們進行手動預測。 ```py >predicted=4.610, expected=12.900 >predicted=7.085, expected=14.600 >predicted=6.423, expected=14.000 >predicted=6.476, expected=13.600 >predicted=6.089, expected=13.500 >predicted=6.335, expected=15.700 >predicted=8.006, expected=13.000 Test RMSE: 7.568 ``` 您可以看到,當新的觀察結果可用時,在 _ARIMAResults_ 對象之外手動跟蹤殘留誤差是多么簡單。例如: ```py residuals = list() ... error = expected - predicted residuals.append(error) ``` 接下來,讓我們將 AR 和 MA 模型放在一起,看看我們如何進行手動預測。 ## 自回歸移動平均模型 我們現在已經看到了如何為適合的 AR 和 MA 模型進行手動預測。 這些方法可以直接放在一起,以便為更全面的 ARMA 模型進行手動預測。 在這個例子中,我們將擬合 ARMA(1,1)模型,該模型可以在 ARIMA 模型中配置為沒有差分的 ARIMA(1,0,1)。 下面列出了完整的示例。 ```py from pandas import Series from matplotlib import pyplot from statsmodels.tsa.arima_model import ARIMA from sklearn.metrics import mean_squared_error from math import sqrt def predict(coef, history): yhat = 0.0 for i in range(1, len(coef)+1): yhat += coef[i-1] * history[-i] return yhat series = Series.from_csv('daily-minimum-temperatures.csv', header=0) X = series.values size = len(X) - 7 train, test = X[0:size], X[size:] history = [x for x in train] predictions = list() for t in range(len(test)): model = ARIMA(history, order=(1,0,1)) model_fit = model.fit(trend='nc', disp=False) ar_coef, ma_coef = model_fit.arparams, model_fit.maparams resid = model_fit.resid yhat = predict(ar_coef, history) + predict(ma_coef, resid) predictions.append(yhat) obs = test[t] history.append(obs) print('>predicted=%.3f, expected=%.3f' % (yhat, obs)) rmse = sqrt(mean_squared_error(test, predictions)) print('Test RMSE: %.3f' % rmse) ``` 您可以看到預測( _yhat_ )是 AR 系數和滯后觀察的點積與 MA 系數和滯后殘差之和。 ```py yhat = predict(ar_coef, history) + predict(ma_coef, resid) ``` 同樣,運行該示例會打印每次迭代的預測值和期望值以及所有預測的匯總 RMSE。 ```py >predicted=11.920, expected=12.900 >predicted=12.309, expected=14.600 >predicted=13.293, expected=14.000 >predicted=13.549, expected=13.600 >predicted=13.504, expected=13.500 >predicted=13.434, expected=15.700 >predicted=14.401, expected=13.000 Test RMSE: 1.405 ``` 我們現在可以添加差異并顯示如何對完整的 ARIMA 模型進行預測。 ## 自回歸綜合移動平均模型 ARIMA 中的 I 代表積分,指的是在線性回歸模型中進行預測之前對時間序列觀察進行的差分。 在進行手動預測時,我們必須在調用 _predict()_ 函數之前執行數據集的這種差分。下面是一個實現整個數據集差異的函數。 ```py def difference(dataset): diff = list() for i in range(1, len(dataset)): value = dataset[i] - dataset[i - 1] diff.append(value) return numpy.array(diff) ``` 簡化是在最老的所需滯后值處跟蹤觀察,并根據需要使用該值來預測預測之前的差異系列。 對于 ARIMA 模型所需的每個差異,可以調用該差異函數一次。 在這個例子中,我們將使用 1 的差異級別,并將其與上一節中的 ARMA 示例相結合,為我們提供 ARIMA(1,1,1)模型。 下面列出了完整的示例。 ```py from pandas import Series from matplotlib import pyplot from statsmodels.tsa.arima_model import ARIMA from sklearn.metrics import mean_squared_error from math import sqrt import numpy def predict(coef, history): yhat = 0.0 for i in range(1, len(coef)+1): yhat += coef[i-1] * history[-i] return yhat def difference(dataset): diff = list() for i in range(1, len(dataset)): value = dataset[i] - dataset[i - 1] diff.append(value) return numpy.array(diff) series = Series.from_csv('daily-minimum-temperatures.csv', header=0) X = series.values size = len(X) - 7 train, test = X[0:size], X[size:] history = [x for x in train] predictions = list() for t in range(len(test)): model = ARIMA(history, order=(1,1,1)) model_fit = model.fit(trend='nc', disp=False) ar_coef, ma_coef = model_fit.arparams, model_fit.maparams resid = model_fit.resid diff = difference(history) yhat = history[-1] + predict(ar_coef, diff) + predict(ma_coef, resid) predictions.append(yhat) obs = test[t] history.append(obs) print('>predicted=%.3f, expected=%.3f' % (yhat, obs)) rmse = sqrt(mean_squared_error(test, predictions)) print('Test RMSE: %.3f' % rmse) ``` 您可以看到,在使用 AR 系數調用 _predict()_ 函數之前,滯后觀察值是不同的。還將關于這些差異輸入值計算殘差。 運行該示例會在每次迭代時打印預測值和期望值,并總結所有預測的表現。 ```py >predicted=11.837, expected=12.900 >predicted=13.265, expected=14.600 >predicted=14.159, expected=14.000 >predicted=13.868, expected=13.600 >predicted=13.662, expected=13.500 >predicted=13.603, expected=15.700 >predicted=14.788, expected=13.000 Test RMSE: 1.232 ``` ## 摘要 在本教程中,您了解了如何使用 Python 對 ARIMA 模型進行手動預測。 具體來說,你學到了: * 如何對 AR 模型進行手動預測。 * 如何對 MA 模型進行手動預測。 * 如何對 ARMA 和 ARIMA 模型進行手動預測。 您對手動預測有任何疑問嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看