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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 如何在 Python 中使用和刪除時間序列數據中的趨勢信息 > 原文: [https://machinelearningmastery.com/time-series-trends-in-python/](https://machinelearningmastery.com/time-series-trends-in-python/) 我們的時間序列數據集可能包含趨勢。 隨著時間的推移,趨勢是系列的持續增加或減少。識別,建模甚至從時間序列數據集中刪除趨勢信息可能會有所幫助。 在本教程中,您將了解如何在 Python 中建模和刪除時間序列數據中的趨勢信息。 完成本教程后,您將了解: * 時間序列中可能存在的趨勢的重要性和類型以及如何識別它們。 * 如何使用簡單的差分方法刪除趨勢。 * 如何建模線性趨勢并將其從銷售時間序列數據集中刪除。 讓我們開始吧。 ![How to Use and Remove Trend Information from Time Series Data in Python](https://img.kancloud.cn/b1/9d/b19dad9d6e2c9fe95838ccbcb656e5b9_640x360.jpg) 如何在 Python 中使用和刪除時間序列數據中的趨勢信息 照片來自 [john78727](https://www.flickr.com/photos/john78727/16611452336/) ,保留一些權利。 ## 時間序列的趨勢 趨勢是時間序列水平的長期增加或減少。 > 一般而言,時間序列中看似不是周期性的系統變化被稱為趨勢。 - 第 5 頁, [R](http://www.amazon.com/dp/0387886974?tag=inspiredalgor-20) 入門時間序列 識別和理解趨勢信息有助于提高模型表現;以下是幾個原因: * **更快的建模**:也許趨勢或缺乏趨勢的知識可以提出方法并使模型選擇和評估更有效率。 * **更簡單的問題**:也許我們可以糾正或消除趨勢,以簡化建模并提高模型表現。 * **更多數據**:也許我們可以直接或作為摘要使用趨勢信息,為模型提供額外信息并提高模型表現。 ### 趨勢類型 有各種趨勢。 我們可以考慮的兩個一般課程是: * **確定性趨勢**:這些是持續增加或減少的趨勢。 * **隨機趨勢**:這些趨勢不一致地增加和減少。 通常,確定性趨勢更容易識別和刪除,但本教程中討論的方法仍然可用于隨機趨勢。 我們可以根據觀察范圍來考慮趨勢。 * **全球趨勢**:這些趨勢適用于整個時間序列。 * **本地趨勢**:這些趨勢適用于時間序列的部分或子序列。 通常,全球趨勢更容易識別和解決。 ### 識別趨勢 您可以繪制時間序列數據以查看趨勢是否明顯。 困難在于,在實踐中,識別時間序列中的趨勢可以是主觀過程。因此,從時間序列中提取或移除它可以是主觀的。 創建數據的線圖并檢查圖表以獲得明顯的趨勢。 在圖中添加線性和非線性趨勢線,看看趨勢是否明顯。 ### 刪除趨勢 具有趨勢的時間序列稱為非平穩的。 可以對已識別的趨勢建模。建模后,可以從時間序列數據集中刪除它。這稱為趨勢時間序列。 如果數據集沒有趨勢或我們成功刪除趨勢,則數據集稱為趨勢靜止。 ### 在機器學習中使用時間序列趨勢 從機器學習的角度來看,數據中的趨勢代表了兩個機會: 1. **刪除信息**:刪除扭曲輸入和輸出變量之間關系的系統信息。 2. **添加信息**:添加系統信息以改善輸入和輸出變量之間的關系。 具體而言,可以從時間序列數據(以及將來的數據)中刪除趨勢,作為數據準備和清理練習。這在使用統計方法進行時間序列預測時很常見,但在使用機器學習模型時并不總能改善結果。 或者,可以直接或作為摘要添加趨勢,作為監督學習問題的新輸入變量以預測輸出變量。 一種或兩種方法可能與您的時間序列預測問題相關,可能值得研究。 接下來,讓我們看一下具有趨勢的數據集。 ## 洗發水銷售數據集 該數據集描述了 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 Dataset 下載數據集并將其放在當前工作目錄中,文件名為“ _shampoo-sales.csv_ ” 可以使用自定義日期解析例程加載數據集,如下所示: ```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) 洗發水銷售數據集圖 ## 通過差異趨勢 也許最簡單的解決時間序列的方法是差分。 具體地,構建新系列,其中當前時間步長的值被計算為原始觀察與前一時間步驟的觀察之間的差異。 ```py value(t) = observation(t) - observation(t-1) ``` 這具有從時間序列數據集中移除趨勢的效果。 我們可以通過直接實現這一點在 Python 中創建一個新的差異數據集。可以創建新的觀察列表。 下面是一個創建 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) X = series.values diff = list() for i in range(1, len(X)): value = X[i] - X[i - 1] diff.append(value) pyplot.plot(diff) pyplot.show() ``` 運行該示例將創建新的去趨勢數據集,然后繪制時間序列。 因為沒有為第一次觀察創建差異值(沒有任何東西可以從中減去),所以新數據集包含少一個記錄。我們可以看到,這種趨勢似乎確實已被刪除。 ![Shampoo Sales Dataset Difference Detrended](https://img.kancloud.cn/b1/fc/b1fc56519325e9adcc7c3eeb576b40e3_800x600.jpg) 洗發水銷售數據集差異趨勢 這種方法適用于具有線性趨勢的數據。如果趨勢是二次的(趨勢的變化也增加或減少),那么可以采用已經差異的數據集的差異,即第二級差分。如果需要,可以進一步重復該過程。 由于差分僅需要在前一時間步進行觀察,因此可以輕松地將其應用于看不見的樣本外數據,以進行預處理或為監督學習提供額外輸入。 接下來,我們將研究擬合模型來描述趨勢。 ## 由模型擬合引起的趨勢 趨勢通常很容易通過觀察結果顯示為一條線。 線性趨勢可以通過線性模型來概括,并且可以使用多項式或其他曲線擬合方法來最佳地總結非線性趨勢。 由于識別趨勢的主觀性和特定領域性,這種方法可以幫助確定趨勢是否存在。即使將線性模型擬合到明顯超線性或指數的趨勢也是有幫助的。 除了用作趨勢識別工具之外,這些擬合模型還可用于消除時間序列。 例如,可以在時間索引上擬合線性模型以預測觀察。該數據集如下所示: ```py X, y 1, obs1 2, obs2 3, obs3 4, obs4 5, obs5 ``` 此模型的預測將形成一條直線,可以將其作為數據集的趨勢線。也可以從原始時間序列中減去這些預測,以提供數據集的去趨勢版本。 ```py value(t) = observation(t) - prediction(t) ``` 來自模型擬合的殘差是數據集的去趨勢形式。也可以使用多項式曲線擬合和其他非線性模型。 我們可以通過在數據上訓練 scikit-learn [LinearRegression](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) 模型在 Python 中實現這一點。 ```py from pandas import read_csv from pandas import datetime from sklearn.linear_model import LinearRegression from matplotlib import pyplot import numpy 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) # fit linear model X = [i for i in range(0, len(series))] X = numpy.reshape(X, (len(X), 1)) y = series.values model = LinearRegression() model.fit(X, y) # calculate trend trend = model.predict(X) # plot trend pyplot.plot(y) pyplot.plot(trend) pyplot.show() # detrend detrended = [y[i]-trend[i] for i in range(0, len(series))] # plot detrended pyplot.plot(detrended) pyplot.show() ``` 首先運行示例將線性模型擬合到整數索引的觀測值,并繪制原始數據集(藍色)上的趨勢線(綠色)。 ![Shampoo Sales Dataset Plot With Trend](https://img.kancloud.cn/95/b1/95b19f9c198b5394c7b0379ced13ac6e_800x600.jpg) 洗發水銷售數據集與趨勢 接下來,從原始數據集中減去趨勢,并繪制得到的去趨勢數據集。 ![Shampoo Sales Dataset Model Detrended](https://img.kancloud.cn/e4/d5/e4d5715f5cae70e92dd6a09a4335a20a_800x600.jpg) 洗發水銷售數據集模型趨勢 同樣,我們可以看到這種方法已經有效地去除了數據集。殘差中可能存在拋物線,這表明也許多項式擬合可能做得更好。 由于趨勢模型僅將觀察的整數索引作為輸入,因此可以將其用于新數據,以取消趨勢或為模型提供新的輸入變量。 ## 進一步閱讀 以下是有關趨勢估計和時間序列去趨勢的一些額外資源。 * [維基百科上的線性趨勢估計](https://en.wikipedia.org/wiki/Linear_trend_estimation) * [趨勢說明](http://www.ltrr.arizona.edu/webhome/dmeko/notes_7.pdf),GEOS 585A,應用時間序列分析[PDF] * 更新:[從此頁面下載](http://www.ltrr.arizona.edu/webhome/dmeko/geos585a.html)。 ## 摘要 在本教程中,您發現了時間序列數據的趨勢以及如何使用 Python 刪除它們。 具體來說,你學到了: * 關于時間序列中趨勢信息的重要性以及如何在機器學習中使用它。 * 如何使用差分從時間序列數據中刪除趨勢。 * 如何建模線性趨勢并將其從時間序列數據中刪除。 您對 detrending 或本教程有任何疑問嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看