<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/persistence-time-series-forecasting-with-python/](https://machinelearningmastery.com/persistence-time-series-forecasting-with-python/) 在任何時間序列預測問題上建立基線都是必不可少的。 表現基線可讓您了解所有其他模型對您的問題的實際執行情況。 在本教程中,您將了解如何開發持久性預測,您可以使用它來計算使用 Python 的時間序列數據集的基準表現級別。 完成本教程后,您將了解: * 計算時間序列預測問題的績效基線的重要性。 * 如何在 Python 中從頭開發持久性模型。 * 如何從持久性模型評估預測并使用它來建立表現基線。 讓我們開始吧。 ![How to Make Baseline Predictions for Time Series Forecasting with Python](https://img.kancloud.cn/33/3e/333e5148142d8798bd2d3e5519686876_640x442.jpg) 如何使用 Python 進行時間序列預測的基線預測 照片由 [Bernard Spragg 撰寫。 NZ](https://www.flickr.com/photos/volvob12b/9573901572/) ,保留一些權利。 ## 預測績效基準 預測表現的基線提供了一個比較點。 它是您問題的所有其他建模技術的參考點。如果模型達到或低于基線的表現,則應該修復或放棄該技術。 用于生成預測以計算基準表現的技術必須易于實現,并且不需要特定于問題的細節。 在為預測問題建立表現基線之前,必須開發測試工具。這包括: 1. 您打算用于訓練和評估模型的**數據集**。 2. 您打算使用**重新采樣**技術來估算技術的表現(例如,訓練/測試拆分)。 3. 您打算用于評估預測的**表現指標**(例如均方誤差)。 準備好之后,您需要選擇一種樸素的技術,您可以使用該技術進行預測并計算基準表現。 目標是盡快獲得時間序列預測問題的基線表現,以便您可以更好地理解數據集并開發更高級的模型。 用于進行基線預測的良好技術的三個屬性是: * **簡單**:一種幾乎不需要訓練或智力的方法。 * **Fast** :一種快速實現并且計算上很容易進行預測的方法。 * **可重復**:一種確定性的方法,意味著它在給定相同輸入的情況下產生預期輸出。 用于建立基線表現的常用算法是持久性算法。 ## 持久性算法(“樸素”預測) 監督機器學習的最常見基線方法是[零規則](http://machinelearningmastery.com/implement-baseline-machine-learning-algorithms-scratch-python/)算法。 該算法在分類的情況下預測多數類,或在回歸的情況下預測平均結果。這可用于時間序列,但不考慮時間序列數據集中的序列相關結構。 與時間序列數據集一起使用的等效技術是持久性算法。 持久性算法使用前一時間步(t-1)的值來預測下一時間步(t + 1)的預期結果。 這滿足了基線預測的上述三個條件。 為了具體化,我們將研究如何開發持久性模型并使用它來為簡單的單變量時間序列問題建立基線表現。首先,讓我們回顧一下 Shampoo Sales 數據集。 ## 洗發水銷售數據集 該數據集描述了 3 年期間每月的洗發水銷售數量。 單位是銷售計數,有 36 個觀察。原始數據集歸功于 Makridakis,Wheelwright 和 Hyndman(1998)。 下面是前 5 行數據的示例,包括標題行。 ```py "Month","Sales" "1-01",266.0 "1-02",145.9 "1-03",183.1 "1-04",119.3 "1-05",180.3 ``` 下面是從[數據市場](https://datamarket.com/data/set/22r0/sales-of-shampoo-over-a-three-year-period)中獲取的整個數據集的圖表,您可以在其中下載數據集并了解有關它的更多信息。 ![Shampoo Sales Dataset](https://img.kancloud.cn/1b/11/1b1108b700529e9ecb48bf7e2a5c7bd0_724x387.jpg) 洗發水銷售數據集 數據集顯示出增長趨勢,可能還有一些季節性因素。 下載數據集并將其放在當前工作目錄中,文件名為“ _shampoo-sales.csv_ ”。 以下代碼片段將加載 Shampoo Sales 數據集并繪制時間序列。 ```py from pandas import read_csv from pandas import datetime from matplotlib import pyplot def parser(x): return datetime.strptime('190'+x, '%Y-%m') series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser) series.plot() pyplot.show() ``` 運行該示例繪制時間序列,如下所示: ![Shampoo Sales Dataset Plot](https://img.kancloud.cn/8d/58/8d588dd57598f15129e9e8500c26168a_800x600.jpg) 洗發水銷售數據集圖 ## 持久性算法 可以在 Python 中輕松實現持久性模型。 我們將這一部分分為 4 個步驟: 1. 將單變量數據集轉換為監督學習問題。 2. 為測試工具建立訓練和測試數據集。 3. 定義持久性模型。 4. 進行預測并建立基準表現。 5. 查看完整示例并繪制輸出。 讓我們潛入。 ### 第 1 步:定義監督學習問題 第一步是加載數據集并創建滯后表示。也就是說,鑒于在 t-1 處的觀察,預測在 t + 1 處的觀察。 ```py # Create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] print(dataframe.head(5)) ``` 此代碼段創建數據集并打印新數據集的前 5 行。 我們可以看到第一行(索引 0)將不得不被丟棄,因為在第一次觀察之前沒有觀察用于進行預測。 從監督學習的角度來看,t-1 列是輸入變量或 X,而 t + 1 列是輸出變量或 y。 ```py t-1 t+1 0 NaN 266.0 1 266.0 145.9 2 145.9 183.1 3 183.1 119.3 4 119.3 180.3 ``` ### 第 2 步:訓練和測試集 下一步是將數據集分成訓練集和測試集。 我們將保留前 66%的“訓練”觀察結果,其余 34%用于評估。在拆分期間,我們小心地排除具有 NaN 值的第一行數據。 在這種情況下不需要訓練;這只是習慣。然后將每個訓練和測試集分成輸入和輸出變量。 ```py # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] ``` ### 第 3 步:持久性算法 我們可以將持久性模型定義為一個返回作為輸入提供的值的函數。 例如,如果提供了 t6 值為 266.0,那么這將作為預測返回,而實際的實際值或期望值恰好是 145.9(取自滯后數據集中的第一個可用行)。 ```py # persistence model def model_persistence(x): return x ``` ### 第 4 步:制作并評估預測 現在我們可以在測試數據集上評估此模型。 我們使用前向驗證方法執行此操作。 不需要模型訓練或再訓練,因此實質上,我們逐步逐步測試數據集時間并獲得預測。 一旦對訓練數據集中的每個時間步進行預測,就將它們與預期值進行比較,并計算均方誤差(MSE)分數。 ```py # walk-forward validation predictions = list() for x in test_X: yhat = model_persistence(x) predictions.append(yhat) test_score = mean_squared_error(test_y, predictions) print('Test MSE: %.3f' % test_score) ``` 在這種情況下,測試數據集的誤差超過 17,730。 ```py Test MSE: 17730.518 ``` ### 第 5 步:完成示例 最后,繪制一個圖來顯示訓練數據集和來自測試數據集的預期值的偏差預測。 從持久性模型預測的情節來看,很明顯該模型落后于現實一步。銷售數據中出現了上升趨勢和月度噪音,凸顯了持久性技術的局限性。 ![Shampoo Sales Persistence Model](https://img.kancloud.cn/85/05/8505544feb7565c46a96b90b16611079_800x600.jpg) 洗發水銷售持久性模型 下面列出了完整的示例。 ```py from pandas import read_csv from pandas import datetime from pandas import DataFrame from pandas import concat from matplotlib import pyplot from sklearn.metrics import mean_squared_error def parser(x): return datetime.strptime('190'+x, '%Y-%m') series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser) # Create lagged dataset values = DataFrame(series.values) dataframe = concat([values.shift(1), values], axis=1) dataframe.columns = ['t-1', 't+1'] print(dataframe.head(5)) # split into train and test sets X = dataframe.values train_size = int(len(X) * 0.66) train, test = X[1:train_size], X[train_size:] train_X, train_y = train[:,0], train[:,1] test_X, test_y = test[:,0], test[:,1] # persistence model def model_persistence(x): return x # walk-forward validation predictions = list() for x in test_X: yhat = model_persistence(x) predictions.append(yhat) test_score = mean_squared_error(test_y, predictions) print('Test MSE: %.3f' % test_score) # plot predictions and expected results pyplot.plot(train_y) pyplot.plot([None for i in train_y] + [x for x in test_y]) pyplot.plot([None for i in train_y] + [x for x in predictions]) pyplot.show() ``` 我們已經看到了從頭開始為 Shampoo Sales 問題開發的持久性模型的示例。 持久性算法很幼稚。它通常被稱為 _ 樸素的預測 _。 它沒有假設應用它的時間序列問題的具體細節。這使得它易于理解,如此快速地實施和評估。 作為機器學習從業者,它也可以激發大量的改進。 記下來。 這很有用,因為這些想法可以成為特征工程工作中的輸入要素,或者可以在以后的集合工作中組合的簡單模型。 ## 摘要 在本教程中,您了解了如何使用 Python 建立時間序列預測問題的基線表現。 具體來說,你學到了: * 建立基線和可以使用的持久性算法的重要性。 * 如何從頭開始在 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>

                              哎呀哎呀视频在线观看