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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 如何用 Python 進行時間序列預測的預測 > 原文: [https://machinelearningmastery.com/make-predictions-time-series-forecasting-python/](https://machinelearningmastery.com/make-predictions-time-series-forecasting-python/) 選擇時間序列預測模型只是一個開始。 在實踐中使用所選模型可能帶來挑戰,包括數據轉換和將模型參數存儲在磁盤上。 在本教程中,您將了解如何最終確定時間序列預測模型并使用它在 Python 中進行預測。 完成本教程后,您將了解: * 如何最終確定模型并將其和所需數據保存到文件中。 * 如何從文件加載最終模型并使用它來進行預測。 * 如何更新與已完成模型關聯的數據以進行后續預測。 讓我們開始吧。 * **2017 年 2 月更新**:更新了布局和文件名,將 AR 案例與手冊案例分開。 ![How to Make Predictions for Time Series Forecasting with Python](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2017/01/How-to-Make-Predictions-for-Time-Series-Forecasting-with-Python.jpg) 如何使用 Python 進行時間序列預測預測 照片由 [joe christiansen](https://www.flickr.com/photos/joe_milkman/5190409637/) 保留,保留一些權利。 ## 進行預測的過程 關于如何調整特定時間序列預測模型的文章很多,但對如何使用模型進行預測幾乎沒有幫助。 一旦您可以為數據構建和調整預測模型,進行預測的過程包括以下步驟: 1. **型號選擇**。這是您選擇模型并收集證據和支持以捍衛決策的地方。 2. **模型定稿**。所選模型將根據所有可用數據進行訓練并保存到文件中以供以后使用。 3. **預測**。加載已保存的模型并用于進行預測。 4. **型號更新**。在有新觀察的情況下更新模型的元素。 我們將在本教程中查看這些元素中的每一個,重點是將模型保存到文件和從文件加載模型,并使用加載的模型進行預測。 在我們深入研究之前,讓我們首先看一下我們可以用作本教程上下文的標準單變量數據集。 ## 每日女性出生數據集 該數據集描述了 1959 年加利福尼亞州每日女性出生人數。 單位是計數,有 365 個觀測值。數據集的來源歸功于 Newton(1988)。 [了解更多信息并從數據市場](https://datamarket.com/data/set/235k/daily-total-female-births-in-california-1959)下載數據集。 下載數據集并將其放在當前工作目錄中,文件名為“ _daily-total-female-births.csv_ ”。 我們可以將數據集加載為 Pandas 系列。下面的代碼片段會加載并繪制數據集。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) print(series.head()) series.plot() pyplot.show() ``` 運行該示例將打印數據集的前 5 行。 ```py Date 1959-01-01 35 1959-01-02 32 1959-01-03 30 1959-01-04 31 1959-01-05 44 ``` 然后將該系列圖作為線圖。 ![Daily Female Birth Dataset Line Plot](https://img.kancloud.cn/4e/b3/4eb3708b59d0dbf97da9b606bb8da472_800x600.jpg) 每日女性出生數據集線圖 ## 1.選擇時間序列預測模型 您必須選擇一個模型。 這是大部分工作將用于準備數據,執行分析以及最終選擇最能捕獲數據關系的模型和模型超參數。 在這種情況下,我們可以在差異數據集上任意選擇滯后為 6 的自回歸模型(AR)。 我們可以在下面演示這個模型。 首先,通過差分對數據進行變換,每次觀察變換為: ```py value(t) = obs(t) - obs(t - 1) ``` 接下來,AR(6)模型在 66%的歷史數據上進行訓練。提取模型學習的回歸系數,并用于跨測試數據集以滾動方式進行預測。 當執行測試數據集中的每個時間步驟時,使用系數進行預測并存儲。然后,可以獲得并存儲對時間步驟的實際觀察,以用作將來預測的滯后變量。 ```py from pandas import Series from matplotlib import pyplot from statsmodels.tsa.ar_model import AR from sklearn.metrics import mean_squared_error import numpy # create a difference transform of the dataset 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) # Make a prediction give regression coefficients and lag obs def predict(coef, history): yhat = coef[0] for i in range(1, len(coef)): yhat += coef[i] * history[-i] return yhat series = Series.from_csv('daily-total-female-births.csv', header=0) # split dataset X = difference(series.values) size = int(len(X) * 0.66) train, test = X[0:size], X[size:] # train autoregression model = AR(train) model_fit = model.fit(maxlag=6, disp=False) window = model_fit.k_ar coef = model_fit.params # walk forward over time steps in test history = [train[i] for i in range(len(train))] predictions = list() for t in range(len(test)): yhat = predict(coef, history) obs = test[t] predictions.append(yhat) history.append(obs) error = mean_squared_error(test, predictions) print('Test MSE: %.3f' % error) # plot pyplot.plot(test) pyplot.plot(predictions, color='red') pyplot.show() ``` 運行該示例首先打印預測的均方誤差(MSE),即 52(如果我們采用平方根將錯誤分數返回到原始單位,則平均約為 7 次出生)。 這是我們期望模型在對新數據進行預測時平均執行的程度。 ```py Test MSE: 52.696 ``` 最后,創建一個圖表,顯示測試數據集中的實際觀察結果(藍色)與預測(紅色)相比較。 ![Predictions vs Actual Daily Female Birth Dataset Line Plot](https://img.kancloud.cn/27/35/27352a3a2732f9eac0c5cb22c6159f0d_800x600.jpg) 預測與實際每日女性出生數據集線圖 這可能不是我們在這個問題上可以開發的最好的模型,但它是合理和熟練的。 ## 2.完成并保存時間序列預測模型 選擇模型后,我們必須完成它。 這意味著保存模型學習的顯著信息,這樣我們就不必在每次需要預測時重新創建它。 這包括首先在所有可用數據上訓練模型,然后將模型保存到文件。 時間序列模型的 _statsmodels_ 實現通過在擬合[上調用 _save()_ 和 _load()_ 來提供內置的保存和加載模型的功能。 ] ARResults](http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.ar_model.ARResults.html) 對象。 例如,下面的代碼將在整個女性出生數據集上訓練 AR(6)模型,并使用內置的 _save()_ 函數保存它,這將基本上腌制 _ARResults_ 對象。 還必須保存差異訓練數據,既可以用于進行預測所需的滯后變量,也可以用于 _ 預測()_ ARResults 的函數所需觀察數量的知識。 對象。 最后,我們需要能夠將差異數據集轉換回原始形式。要做到這一點,我們必須跟蹤最后的實際觀察。這樣可以將預測的差值添加到其中。 ```py # fit an AR model and save the whole model to file from pandas import Series from statsmodels.tsa.ar_model import AR from statsmodels.tsa.ar_model import ARResults import numpy # create a difference transform of the dataset 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) # load dataset series = Series.from_csv('daily-total-female-births.csv', header=0) X = difference(series.values) # fit model model = AR(X) model_fit = model.fit(maxlag=6, disp=False) # save model to file model_fit.save('ar_model.pkl') # save the differenced dataset numpy.save('ar_data.npy', X) # save the last ob numpy.save('ar_obs.npy', [series.values[-1]]) ``` 此代碼將創建一個文件 _ar_model.pkl_ ,您可以稍后加載該文件并用于進行預測。 整個訓練數據集保存為 _ar_data.npy_ ,最后一個觀察結果保存在文件 _ar_obs.npy_ 中,作為帶有一個項目的數組。 NumPy [save()](https://docs.scipy.org/doc/numpy/reference/generated/numpy.save.html)功能用于保存差異訓練數據和觀察。然后可以使用 [load()](https://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html)函數來加載這些數組。 下面的代碼段將加載模型,差異數據和最后一次觀察。 ```py # load the AR model from file from statsmodels.tsa.ar_model import ARResults import numpy loaded = ARResults.load('ar_model.pkl') print(loaded.params) data = numpy.load('ar_data.npy') last_ob = numpy.load('ar_obs.npy') print(last_ob) ``` 運行該示例打印系數和最后一個觀察。 ```py [ 0.12129822 -0.75275857 -0.612367 -0.51097172 -0.4176669 -0.32116469 -0.23412997] [50] ``` 我認為這對大多數情況都有好處,但也很重要。您可能會對 statsmodels API 進行更改。 我傾向于直接使用模型的系數,如上面的情況,使用滾動預測來評估模型。 在這種情況下,您可以簡單地存儲模型系數,然后加載它們并進行預測。 下面的示例僅保存模型中的系數,以及進行下一次預測所需的最小差異滯后值以及轉換下一次預測所需的最后一次觀察。 ```py # fit an AR model and manually save coefficients to file from pandas import Series from statsmodels.tsa.ar_model import AR import numpy # create a difference transform of the dataset 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) # load dataset series = Series.from_csv('daily-total-female-births.csv', header=0) X = difference(series.values) # fit model window_size = 6 model = AR(X) model_fit = model.fit(maxlag=window_size, disp=False) # save coefficients coef = model_fit.params numpy.save('man_model.npy', coef) # save lag lag = X[-window_size:] numpy.save('man_data.npy', lag) # save the last ob numpy.save('man_obs.npy', [series.values[-1]]) ``` 系數保存在本地文件 _man_model.npy_ 中,滯后歷史記錄保存在文件 _man_data.npy_ 中,最后一次觀察保存在文件 _man_obs 中。 npy_ 。 然后可以按如下方式再次加載這些值: ```py # load the manually saved model from file import numpy coef = numpy.load('man_model.npy') print(coef) lag = numpy.load('man_data.npy') print(lag) last_ob = numpy.load('man_obs.npy') print(last_ob) ``` 運行此示例將打印加載的數據以供查看。我們可以看到系數和最后一個觀察與前一個例子的輸出相匹配。 ```py [ 0.12129822 -0.75275857 -0.612367 -0.51097172 -0.4176669 -0.32116469 -0.23412997] [-10 3 15 -4 7 -5] [50] ``` 現在我們知道如何保存最終模型,我們可以使用它來進行預測。 ## 3.制作時間序列預測 進行預測涉及加載已保存的模型并在下一個時間步驟估計觀測值。 如果 ARResults 對象被序列化,我們可以使用 _predict()_ 函數來預測下一個時間段。 下面的示例顯示了如何預測下一個時間段。 從文件加載模型,訓練數據和最后觀察。 該周期被指定為 _predict()_ 函數,作為訓練數據集結束后的下一個時間索引。該索引可以直接存儲在文件中,而不是存儲整個訓練數據,這可以是效率。 進行預測,該預測是在差異數據集的背景下進行的。要將預測轉回原始單位,必須將其添加到最后已知的觀察中。 ```py # load AR model from file and make a one-step prediction from statsmodels.tsa.ar_model import ARResults import numpy # load model model = ARResults.load('ar_model.pkl') data = numpy.load('ar_data.npy') last_ob = numpy.load('ar_obs.npy') # make prediction predictions = model.predict(start=len(data), end=len(data)) # transform prediction yhat = predictions[0] + last_ob[0] print('Prediction: %f' % yhat) ``` 運行該示例將打印預測。 ```py Prediction: 46.755211 ``` 我們也可以使用類似的技巧來加載原始系數并進行手動預測。 下面列出了完整的示例。 ```py # load a coefficients and from file and make a manual prediction import numpy def predict(coef, history): yhat = coef[0] for i in range(1, len(coef)): yhat += coef[i] * history[-i] return yhat # load model coef = numpy.load('man_model.npy') lag = numpy.load('man_data.npy') last_ob = numpy.load('man_obs.npy') # make prediction prediction = predict(coef, lag) # transform prediction yhat = prediction + last_ob[0] print('Prediction: %f' % yhat) ``` 運行該示例,我們實現了與我們預期相同的預測,因為用于進行預測的基礎模型和方法是相同的。 ```py Prediction: 46.755211 ``` ## 4.更新預測模型 我們的工作沒有完成。 一旦下一次真實觀察可用,我們必須更新與模型相關的數據。 具體來說,我們必須更新: 1. 差異訓練數據集用作進行后續預測的輸入。 2. 最后一次觀察,為預測的差異值提供背景。 讓我們假設該系列中的下一個實際觀察結果為 48\. 新觀察必須首先與最后一次觀察不同。然后可以將其存儲在差異觀察列表中。最后,該值可以存儲為最后一個觀察值。 對于存儲的 AR 模型,我們可以更新 _ar_data.npy_ 和 _ar_obs.npy_ 文件。完整示例如下: ```py # update the data for the AR model with a new obs import numpy # get real observation observation = 48 # load the saved data data = numpy.load('ar_data.npy') last_ob = numpy.load('ar_obs.npy') # update and save differenced observation diffed = observation - last_ob[0] data = numpy.append(data, [diffed], axis=0) numpy.save('ar_data.npy', data) # update and save real observation last_ob[0] = observation numpy.save('ar_obs.npy', last_ob) ``` 我們可以對手動案例的數據文件進行相同的更改。具體來說,我們可以分別更新 _man_data.npy_ 和 _man_obs.npy_ 。 下面列出了完整的示例。 ```py # update the data for the manual model with a new obs import numpy # get real observation observation = 48 # update and save differenced observation lag = numpy.load('man_data.npy') last_ob = numpy.load('man_obs.npy') diffed = observation - last_ob[0] lag = numpy.append(lag[1:], [diffed], axis=0) numpy.save('man_data.npy', lag) # update and save real observation last_ob[0] = observation numpy.save('man_obs.npy', last_ob) ``` 我們專注于一步預測。 通過重復使用模型并使用先前時間步長的預測作為輸入滯后值來預測后續時間步驟的觀測,這些方法對于多步預測同樣容易。 ## 考慮存儲所有觀察結果 通常,跟蹤所有觀察結果是個好主意。 這將允許您: * 為進一步的時間序列分析提供上下文,以了解數據中的新變化。 * 根據最新數據在未來訓練新模型。 * 回溯測試新的和不同的模型,看看表現是否可以提高。 對于小型應用程序,您可以將原始觀察結果存儲在模型旁邊的文件中。 還可能希望以簡單文本存儲模型系數和所需滯后數據以及最后觀察以便于查看。 對于較大的應用程序,也許可以使用數據庫系統來存儲觀察結果。 ## 摘要 在本教程中,您了解了如何最終確定時間序列模型并使用它來使用 Python 進行預測。 具體來說,你學到了: * 如何將時間序列預測模型保存到文件。 * 如何從文件加載保存的時間序列預測并進行預測。 * 如何使用新觀察更新時間序列預測模型。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看