<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/feature-selection-time-series-forecasting-python/](https://machinelearningmastery.com/feature-selection-time-series-forecasting-python/) 在時間序列數據上使用機器學習方法需要特征工程。 單變量時間序列數據集僅由一系列觀察組成。這些必須轉換為輸入和輸出功能,以便使用監督學習算法。 問題在于,您可以為時間序列問題設計的功能類型和數量幾乎沒有限制。像 correlogram 這樣的經典時間序列分析工具可以幫助評估滯后變量,但在選擇其他類型的特征時不會直接幫助,例如從時間戳(年,月或日)和移動統計數據(如移動平均值)得出的特征。 在本教程中,您將了解在處理時間序列數據時如何使用功能重要性和功能選擇的機器學習工具。 完成本教程后,您將了解: * 如何創建和解釋滯后觀察的相關圖。 * 如何計算和解釋時間序列要素的要素重要性分數。 * 如何在時間序列輸入變量上執行特征選擇。 讓我們開始吧。 ## 教程概述 本教程分為以下 5 個步驟: 1. **每月汽車銷售數據集**:描述我們將要使用的數據集。 2. **Make Stationary** :描述如何使數據集靜止以進行分析和預測。 3. **自相關圖**:描述如何創建時間序列數據的相關圖。 4. **滯后變量的特征重要性**:描述如何計算和查看時間序列數據的特征重要性分數。 5. **滯后變量的特征選擇**:描述如何計算和查看時間序列數據的特征選擇結果。 讓我們從查看標準時間序列數據集開始。 ## 每月汽車銷售數據集 在本教程中,我們將使用 Monthly Car Sales 數據集。 該數據集描述了 1960 年至 1968 年間加拿大魁北克省的汽車銷售數量。 單位是銷售數量的計數,有 108 個觀察值。源數據歸功于 Abraham 和 Ledolter(1983)。 [您可以從 DataMarket](https://datamarket.com/data/set/22n4/monthly-car-sales-in-quebec-1960-1968) 下載數據集。 下載數據集并將其保存到當前工作目錄中,文件名為“ _car-sales.csv_ ”。請注意,您可能需要從文件中刪除頁腳信息。 下面的代碼將數據集加載為 Pandas _ 系列 _ 對象。 ```py # line plot of time series from pandas import Series from matplotlib import pyplot # load dataset series = Series.from_csv('car-sales.csv', header=0) # display first few rows print(series.head(5)) # line plot of dataset series.plot() pyplot.show() ``` 運行該示例將打印前 5 行數據。 ```py Month 1960-01-01 6550 1960-02-01 8728 1960-03-01 12026 1960-04-01 14395 1960-05-01 14587 Name: Sales, dtype: int64 ``` 還提供了數據的線圖。 ![Monthly Car Sales Dataset Line Plot](https://img.kancloud.cn/4f/80/4f802614dbeda4249009f10b0305644c_640x480.jpg) 每月汽車銷售數據集線圖 ## 制作文具 我們可以看到明確的季節性和數據的增長趨勢。 趨勢和季節性是固定的組成部分,可以添加到我們做出的任何預測中。它們很有用,但需要刪除才能探索任何其他有助于預測的系統信號。 季節性和趨勢被移除的時間序列稱為靜止。 為了消除季節性,我們可以采取季節性差異,從而產生所謂的季節性調整時間序列。 季節性的時期似乎是一年(12 個月)。下面的代碼計算經季節性調整的時間序列并將其保存到文件“ _seasonally-adjusted.csv_ ”。 ```py # seasonally adjust the time series from pandas import Series from matplotlib import pyplot # load dataset series = Series.from_csv('car-sales.csv', header=0) # seasonal difference differenced = series.diff(12) # trim off the first year of empty data differenced = differenced[12:] # save differenced dataset to file differenced.to_csv('seasonally_adjusted.csv') # plot differenced dataset differenced.plot() pyplot.show() ``` 由于前 12 個月的數據沒有先前的數據差異,因此必須將其丟棄。 固定數據存儲在“ _seasonally-adjusted.csv_ ”中。創建差異數據的線圖。 ![Seasonally Differenced Monthly Car Sales Dataset Line Plot](https://img.kancloud.cn/bb/bc/bbbca3ce23692248434cefc055b225fa_640x480.jpg) 季節性差異月度汽車銷售數據集線圖 該圖表明通過差分消除了季節性和趨勢信息。 ## 自相關圖 傳統上,時間序列特征是基于它們與輸出變量的相關性來選擇的。 這稱為自相關,涉及繪制自相關圖,也稱為相關圖。這些顯示了每個滯后觀察的相關性以及相關性是否具有統計學意義。 例如,下面的代碼繪制了月度汽車銷售數據集中所有滯后變量的相關圖。 ```py from pandas import Series from statsmodels.graphics.tsaplots import plot_acf from matplotlib import pyplot series = Series.from_csv('seasonally_adjusted.csv', header=None) plot_acf(series) pyplot.show() ``` 運行該示例將創建數據的相關圖或自相關函數(ACF)圖。 該圖顯示了沿 x 軸的滯后值和 y 軸上的相關性,在-1 和 1 之間分別為負相關和正相關滯后。 藍色區域上方的點表示統計顯著性。滯后值為 0 的相關性為 1 表示觀察與其自身的 100%正相關。 該圖顯示在 1,2,12 和 17 個月時的顯著滯后值。 ![Correlogram of the Monthly Car Sales Dataset](https://img.kancloud.cn/48/5f/485fab26a89e6bc3d39bbf9a945128d3_640x480.jpg) 每月汽車銷售數據集的相關圖 該分析為比較提供了良好的基線。 ## 監督學習的時間序列 我們可以通過將滯后觀察(例如 t-1)作為輸入并使用當前觀察(t)作為輸出變量,將單變量月度汽車銷售數據集轉換為[監督學習問題](http://machinelearningmastery.com/time-series-forecasting-supervised-learning/)。 我們可以在 Pandas 中使用 shift 函數創建移動觀測的新列。 下面的示例創建一個新的時間序列,其中包含 12 個月的滯后值,以預測當前的觀察結果。 12 個月的轉變意味著前 12 行數據不可用,因為它們包含 _NaN_ 值。 ```py from pandas import Series from pandas import DataFrame # load dataset series = Series.from_csv('seasonally_adjusted.csv', header=None) # reframe as supervised learning dataframe = DataFrame() for i in range(12,0,-1): dataframe['t-'+str(i)] = series.shift(i) dataframe['t'] = series.values print(dataframe.head(13)) dataframe = dataframe[13:] # save to new file dataframe.to_csv('lags_12months_features.csv', index=False) ``` 運行該示例將打印顯示前 12 行和可用第 13 行的前 13 行數據。 ```py t-12 t-11 t-10 t-9 t-8 t-7 t-6 t-5 \ 1961-01-01 NaN NaN NaN NaN NaN NaN NaN NaN 1961-02-01 NaN NaN NaN NaN NaN NaN NaN NaN 1961-03-01 NaN NaN NaN NaN NaN NaN NaN NaN 1961-04-01 NaN NaN NaN NaN NaN NaN NaN NaN 1961-05-01 NaN NaN NaN NaN NaN NaN NaN NaN 1961-06-01 NaN NaN NaN NaN NaN NaN NaN 687.0 1961-07-01 NaN NaN NaN NaN NaN NaN 687.0 646.0 1961-08-01 NaN NaN NaN NaN NaN 687.0 646.0 -189.0 1961-09-01 NaN NaN NaN NaN 687.0 646.0 -189.0 -611.0 1961-10-01 NaN NaN NaN 687.0 646.0 -189.0 -611.0 1339.0 1961-11-01 NaN NaN 687.0 646.0 -189.0 -611.0 1339.0 30.0 1961-12-01 NaN 687.0 646.0 -189.0 -611.0 1339.0 30.0 1645.0 1962-01-01 687.0 646.0 -189.0 -611.0 1339.0 30.0 1645.0 -276.0 t-4 t-3 t-2 t-1 t 1961-01-01 NaN NaN NaN NaN 687.0 1961-02-01 NaN NaN NaN 687.0 646.0 1961-03-01 NaN NaN 687.0 646.0 -189.0 1961-04-01 NaN 687.0 646.0 -189.0 -611.0 1961-05-01 687.0 646.0 -189.0 -611.0 1339.0 1961-06-01 646.0 -189.0 -611.0 1339.0 30.0 1961-07-01 -189.0 -611.0 1339.0 30.0 1645.0 1961-08-01 -611.0 1339.0 30.0 1645.0 -276.0 1961-09-01 1339.0 30.0 1645.0 -276.0 561.0 1961-10-01 30.0 1645.0 -276.0 561.0 470.0 1961-11-01 1645.0 -276.0 561.0 470.0 3395.0 1961-12-01 -276.0 561.0 470.0 3395.0 360.0 1962-01-01 561.0 470.0 3395.0 360.0 3440.0 ``` 從新數據集中刪除前 12 行,結果保存在文件“ _lags_12months_features.csv_ ”中。 這個過程可以以任意數量的時間步長重復,例如 6 個月或 24 個月,我建議進行實驗。 ## 滯后變量的特征重要性 決策樹的集合,如袋裝樹,隨機森林和額外樹木,可用于計算特征重要性分數。 這在機器學習中很常見,用于在開發預測模型時估計輸入特征的相對有用性。 我們可以使用特征重要性來幫助估計人為輸入特征對時間序列預測的相對重要性。 這很重要,因為我們不僅可以設計上面的滯后觀察特征,還可以設計基于觀測時間戳,滾動統計等的特征。特征重要性是一種幫助理清建模時可能更有用的方法。 下面的示例加載上一節中創建的數據集的監督學習視圖,擬合隨機森林模型( [RandomForestRegressor](http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html) ),并總結 12 個滯后觀察中每一個的相對特征重要性分數。 使用大量樹木來確保分數有些穩定。此外,初始化隨機數種子以確保每次運行代碼時都獲得相同的結果。 ```py from pandas import read_csv from sklearn.ensemble import RandomForestRegressor from matplotlib import pyplot # load data dataframe = read_csv('lags_12months_features.csv', header=0) array = dataframe.values # split into input and output X = array[:,0:-1] y = array[:,-1] # fit random forest model model = RandomForestRegressor(n_estimators=500, random_state=1) model.fit(X, y) # show importance scores print(model.feature_importances_) # plot importance scores names = dataframe.columns.values[0:-1] ticks = [i for i in range(len(names))] pyplot.bar(ticks, model.feature_importances_) pyplot.xticks(ticks, names) pyplot.show() ``` 首先運行該示例打印滯后觀察的重要性分數。 ```py [ 0.21642244 0.06271259 0.05662302 0.05543768 0.07155573 0.08478599 0.07699371 0.05366735 0.1033234 0.04897883 0.1066669 0.06283236] ``` 然后將分數繪制為條形圖。 該圖顯示了 t-12 觀測的高度相對重要性,以及在較小程度上觀察到 t-2 和 t-4 觀測的重要性。 值得注意的是,與上述相關圖的結果存在差異。 ![Bar Graph of Feature Importance Scores on the Monthly Car Sales Dataset](https://img.kancloud.cn/24/0b/240b1484677fd7006b4c36b628951905_640x480.jpg) 月度汽車銷售數據集中特征重要性得分的條形圖 可以使用可以計算重要性分數的不同方法重復該過程,例如梯度增強,額外樹和袋裝決策樹。 ## 滯后變量的特征選擇 我們還可以使用特征選擇來自動識別和選擇最具預測性的輸入特征。 用于特征選擇的流行方法稱為遞歸特征選擇(RFE)。 RFE 通過創建預測模型,加權特征和修剪具有最小權重的特征來工作,然后重復該過程直到剩下所需數量的特征。 下面的示例使用 RFE 和隨機森林預測模型,并將所需的輸入要素數設置為 4。 ```py from pandas import read_csv from sklearn.feature_selection import RFE from sklearn.ensemble import RandomForestRegressor from matplotlib import pyplot # load dataset dataframe = read_csv('lags_12months_features.csv', header=0) # separate into input and output variables array = dataframe.values X = array[:,0:-1] y = array[:,-1] # perform feature selection rfe = RFE(RandomForestRegressor(n_estimators=500, random_state=1), 4) fit = rfe.fit(X, y) # report selected features print('Selected Features:') names = dataframe.columns.values[0:-1] for i in range(len(fit.support_)): if fit.support_[i]: print(names[i]) # plot feature rank names = dataframe.columns.values[0:-1] ticks = [i for i in range(len(names))] pyplot.bar(ticks, fit.ranking_) pyplot.xticks(ticks, names) pyplot.show() ``` 運行該示例將打印 4 個所選要素的名稱。 不出所料,結果與上一節中顯示出高度重要性的特征相匹配。 ```py Selected Features: t-12 t-6 t-4 t-2 ``` 還會創建一個條形圖,顯示每個輸入要素的要素選擇等級(越小越好)。 ![Bar Graph of Feature Selection Rank on the Monthly Car Sales Dataset](https://img.kancloud.cn/b7/76/b7760cb39cfedb2e1b182926f756d024_640x480.jpg) 月度汽車銷售數據集中特征選擇等級的條形圖 可以使用不同數量的特征重復此過程以選擇 4 個以上以及除隨機森林之外的不同模型。 ## 摘要 在本教程中,您了解了如何使用應用機器學習工具來幫助在預測時從時間序列數據中選擇要素。 具體來說,你學到了: * 如何解釋高度相關滯后觀察的相關圖。 * 如何計算和查看時間序列數據中的要素重要性分數。 * 如何使用特征選擇來識別時間序列數據中最相關的輸入變量。 對時間序列數據的特征選擇有任何疑問嗎? 在評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看