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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 使用 Python 進行數據準備,特征工程和時間序列預測的移動平均平滑 > 原文: [https://machinelearningmastery.com/moving-average-smoothing-for-time-series-forecasting-python/](https://machinelearningmastery.com/moving-average-smoothing-for-time-series-forecasting-python/) 移動平均平滑是時間序列預測中一種樸素有效的技術。 它可用于數據準備,特征工程,甚至可直接用于預測。 在本教程中,您將了解如何使用移動平均平滑進行 Python 的時間序列預測。 完成本教程后,您將了解: * 在您使用它之前,移動平均平滑的工作原理和數據的某些期望。 * 如何使用移動平均平滑進行數據準備和特征工程。 * 如何使用移動平均線平滑來進行預測。 讓我們開始吧。 ![Moving Average Smoothing for Data Preparation, Feature Engineering, and Time Series Forecasting with Python](https://img.kancloud.cn/df/8f/df8f4ac2d1b5b90b434a98dc9af5ee2d_640x427.jpg) 使用 Python 進行數據準備,特征工程和時間序列預測的移動平均平滑 照片由[土地管理局](https://www.flickr.com/photos/blmoregon/11572015283/),保留一些權利。 ## 移動平均線平滑 平滑是一種應用于時間序列的技術,用于消除時間步長之間的細粒度變化。 平滑的希望是去除噪聲并更好地暴露潛在因果過程的信號。移動平均線是時間序列分析和時間序列預測中使用的一種簡單而常見的平滑類型。 計算移動平均線涉及創建一個新系列,其中值由原始時間序列中原始觀測值的平均值組成。 移動平均值要求您指定稱為窗口寬度的窗口大小。這定義了用于計算移動平均值的原始觀測數。 移動平均中的“移動”部分指的是由窗口寬度定義的窗口沿時間序列滑動以計算新系列中的平均值的事實。 使用的移動平均線有兩種主要類型:居中和尾隨移動平均線。 ### 居中移動平均線 時間(t)的值計算為時間(t)之前,之前和之后的原始觀測值的平均值。 例如,窗口為 3 的中心移動平均值將計算為: ```py center_ma(t) = mean(obs(t-1), obs(t), obs(t+1)) ``` 此方法需要了解未來值,因此用于時間序列分析以更好地理解數據集。 中心移動平均線可以用作從時間序列中移除趨勢和季節性組件的一般方法,這是我們在預測時經常無法使用的方法。 ### 追蹤移動平均線 時間(t)的值計算為時間(t)和之前的原始觀測值的平均值。 例如,窗口為 3 的尾隨移動平均值將計算為: ```py trail_ma(t) = mean(obs(t-2), obs(t-1), obs(t)) ``` 尾隨移動平均線僅使用歷史觀測值并用于時間序列預測。 這是我們將在本教程中關注的移動平均線類型。 ### 數據期望 計算時間序列的移動平均值會對您的數據做出一些假設。 假設趨勢和季節性組件已從您的時間序列中刪除。 這意味著您的時間序列是靜止的,或者沒有顯示明顯的趨勢(長期增加或減少運動)或季節性(一致的周期性結構)。 在預測時,有許多方法可以從時間序列數據集中刪除趨勢和季節性。每種方法的兩個好方法是使用差分方法并對行為進行建模并明確地從系列中減去它。 當在時間序列問題上使用機器學習算法時,可以以多種方式使用移動平均值。 在本教程中,我們將研究如何計算尾隨移動平均值,以用作數據準備,特征工程和直接進行預測。 在我們深入研究這些示例之前,讓我們看一下我們將在每個示例中使用的 Daily Female Births 數據集。 ## 每日女性出生數據集 該數據集描述了 1959 年加利福尼亞州每日女性出生人數。 單位是計數,有 365 個觀測值。數據集的來源歸功于 Newton(1988)。 下面是前 5 行數據的示例,包括標題行。 ```py "Date","Births" "1959-01-01",35 "1959-01-02",32 "1959-01-03",30 "1959-01-04",31 "1959-01-05",44 ``` 下面是從[數據市場](https://datamarket.com/data/set/235k/daily-total-female-births-in-california-1959)中獲取的整個數據集的圖表。 ![Daily Female Births Dataset](https://img.kancloud.cn/90/d1/90d13545ebab853983540317fa241b6b_722x387.jpg) 每日女性出生數據集 該數據集是探索移動平均線方法的一個很好的例子,因為它沒有顯示任何明確的趨勢或季節性。 ### 加載每日女性出生數據集 下載數據集并將其放在當前工作目錄中,文件名為“ _daily-total-female-births.csv_ ”。 下面的代碼片段將數據集加載為 Series,顯示數據集的前 5 行,并將整個系列繪制為線圖。 ```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 Births Dataset Plot](https://img.kancloud.cn/4e/b3/4eb3708b59d0dbf97da9b606bb8da472_800x600.jpg) 每日女性出生數據集圖 ## 移動平均值作為數據準備 移動平均值可用作數據準備技術,以創建原始數據集的平滑版本。 平滑作為數據準備技術是有用的,因為它可以減少觀察中的隨機變化并更好地揭示潛在因果過程的結構。 Series Pandas 對象上的 [rolling()](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.rolling.html)函數會自動將觀察分組到窗口中。您可以指定窗口大小,默認情況下會創建一個尾隨窗口。創建窗口后,我們可以取平均值,這是我們的轉換數據集。 通過保留最后幾個觀測值的原始值并更新新的平均值,可以很容易地改變未來的新觀測結果。 為了使這個具體,窗口大小為 3,時間(t)的變換值被計算為前 3 個觀測值(t-2,t-1,t)的平均值,如下所示: ```py obs(t) = 1/3 * (t-2 + t-1 + t) ``` 對于每日女性出生數據集,第一個移動平均值將在 1 月 3 日,如下所示: ```py obs(t) = 1/3 * (t-2 + t-1 + t) obs(t) = 1/3 * (35 + 32 + 30) obs(t) = 32.333 ``` 下面是將每日女性出生數據集轉換為窗口大小為 3 天的移動平均值的示例,任意選擇。 ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) # Tail-rolling average transform rolling = series.rolling(window=3) rolling_mean = rolling.mean() print(rolling_mean.head(10)) # plot original and transformed dataset series.plot() rolling_mean.plot(color='red') pyplot.show() ``` 運行該示例將從轉換的數據集中打印前 10 個觀察值。 我們可以看到前兩個觀測值需要被丟棄。 ```py Date 1959-01-01 NaN 1959-01-02 NaN 1959-01-03 32.333333 1959-01-04 31.000000 1959-01-05 35.000000 1959-01-06 34.666667 1959-01-07 39.333333 1959-01-08 39.000000 1959-01-09 42.000000 1959-01-10 36.000000 ``` 繪制原始觀測值(藍色),疊加移動平均變換(紅色)。 ![Moving Average Transform](https://img.kancloud.cn/26/da/26da4e0b44ce140fd53f54261b217c12_800x600.jpg) 移動平均變換 為了更好地了解變換的效果,我們可以放大并繪制前 100 個觀測值。 ![Zoomed Moving Average Transform](https://img.kancloud.cn/64/b5/64b5977ec7962aa9ebf8b319ca901f1b_800x600.jpg) 放大移動平均線變換 在這里,您可以清楚地看到轉換后的數據集中的滯后。 接下來,讓我們看一下使用移動平均線作為特征工程方法。 ## 移動平均線作為特征工程 當將時間序列預測建模為監督學習問題時,移動平均值可以用作新信息的來源。 在這種情況下,計算移動平均值并將其添加為用于預測下一個時間步長的新輸入特征。 首先,該系列的副本必須向前移動一步。這將代表我們預測問題的輸入,或系列的滯后= 1 版本。這是時間序列問題的標準監督學習視圖。例如: ```py X, y NaN, obs1 obs1, obs2 obs2, obs3 ``` 接下來,系列的第二個副本需要向前移一,減去窗口大小。這是為了確保移動平均值總結最后幾個值并且不包括平均值中要預測的值,這將是問題的無效框架,因為輸入將包含對預測的未來的知識。 例如,窗口大小為 3 時,我們必須將系列向前移動 2 個步驟。這是因為我們希望包括前兩個觀測值以及移動平均線中的當前觀測值,以便預測下一個值。然后我們可以計算這個移位系列的移動平均線。 下面是如何計算前 5 個移動平均值的示例。請記住,數據集向前移動 2 個步驟,當我們沿著時間序列移動時,在我們甚至有足夠的數據來計算窗口= 3 移動平均值之前,它至少需要 3 個時間步長。 ```py Observations, Mean NaN NaN NaN, NaN NaN NaN, NaN, 35 NaN NaN, 35, 32 NaN 30, 32, 35 32 ``` 下面是將前 3 個值的移動平均值包含為新要素的示例,以及每日女性出生數據集的滯后-1 輸入要素。 ```py from pandas import Series from pandas import DataFrame from pandas import concat series = Series.from_csv('daily-total-female-births.csv', header=0) df = DataFrame(series.values) width = 3 lag1 = df.shift(1) lag3 = df.shift(width - 1) window = lag3.rolling(window=width) means = window.mean() dataframe = concat([means, lag1, df], axis=1) dataframe.columns = ['mean', 't-1', 't+1'] print(dataframe.head(10)) ``` 運行該示例將創建新數據集并打印前 10 行。 我們可以看到前 3 行不能使用,必須丟棄。不能使用 lag1 數據集的第一行,因為沒有先前的觀察來預測第一次觀察,因此使用 NaN 值。 ```py mean t-1 t+1 0 NaN NaN 35 1 NaN 35.0 32 2 NaN 32.0 30 3 NaN 30.0 31 4 32.333333 31.0 44 5 31.000000 44.0 29 6 35.000000 29.0 45 7 34.666667 45.0 43 8 39.333333 43.0 38 9 39.000000 38.0 27 ``` 下一節將介紹如何使用移動平均線作為樸素模型進行預測。 ## 移動平均線作為預測 移動平均值也可以直接用于預測。 這是一個樸素的模型,并假設時間序列的趨勢和季節性組成部分已被刪除或調整。 用于預測的移動平均模型可以容易地以前瞻的方式使用。當新的觀察結果可用時(例如每天),可以更新模型并對第二天進行預測。 我們可以在 Python 中手動實現它。以下是以前進方式使用的移動平均模型的示例。 ```py from pandas import Series from numpy import mean from sklearn.metrics import mean_squared_error from matplotlib import pyplot series = Series.from_csv('daily-total-female-births.csv', header=0) # prepare situation X = series.values window = 3 history = [X[i] for i in range(window)] test = [X[i] for i in range(window, len(X))] predictions = list() # walk forward over time steps in test for t in range(len(test)): length = len(history) yhat = mean([history[i] for i in range(length-window,length)]) obs = test[t] predictions.append(yhat) history.append(obs) print('predicted=%f, expected=%f' % (yhat, obs)) error = mean_squared_error(test, predictions) print('Test MSE: %.3f' % error) # plot pyplot.plot(test) pyplot.plot(predictions, color='red') pyplot.show() # zoom plot pyplot.plot(test[0:100]) pyplot.plot(predictions[0:100], color='red') pyplot.show() ``` 運行該示例在每個步驟向前移動時打印預測值和期望值,從時間步驟 4(1959-01-04)開始。 最后,報告所有預測的均方誤差(MSE)。 ```py predicted=32.333333, expected=31.000000 predicted=31.000000, expected=44.000000 predicted=35.000000, expected=29.000000 predicted=34.666667, expected=45.000000 predicted=39.333333, expected=43.000000 ... predicted=38.333333, expected=52.000000 predicted=41.000000, expected=48.000000 predicted=45.666667, expected=55.000000 predicted=51.666667, expected=50.000000 Test MSE: 61.379 ``` 該示例通過繪制與預測(紅色)相比的預期測試值(藍色)來結束。 ![Moving Average Predictions](https://img.kancloud.cn/d6/28/d628846dd8d07982856bd23671c498a5_800x600.jpg) 移動平均預測 再次,放大前 100 個預測可以了解 3 天移動平均預測的技巧。 請注意,窗口寬度為 3 是任意選擇的,未進行優化。 ![Zoomed Moving Average Predictions](https://img.kancloud.cn/23/18/23180c718ee7d4c46d5545c68a7182ad_800x600.jpg) 放大移動平均線預測 ## 進一步閱讀 本節列出了一些平滑移動平均線的資源,可用于時間序列分析和時間序列預測。 * 第 4 章,平滑方法, [R 實用時間序列預測:動手指南](http://www.amazon.com/dp/0997847913?tag=inspiredalgor-20)。 * 第 1.5.4 節平滑,[引入時間序列與 R](http://www.amazon.com/dp/0387886974?tag=inspiredalgor-20) 。 * 第 2.4 節時間序列中的平滑,[時間序列分析及其應用:使用 R 實例](http://www.amazon.com/dp/144197864X?tag=inspiredalgor-20)。 ## 摘要 在本教程中,您了解了如何使用移動平均線平滑進行 Python 的時間序列預測。 具體來說,你學到了: * 移動平均平滑的工作原理以及時間序列數據在使用前的預期。 * 如何在 Python 中使用移動平均平滑進行數據準備。 * 如何在 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>

                              哎呀哎呀视频在线观看