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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 用于時間序列預測的 4 種通用機器學習數據變換 > 原文: [https://machinelearningmastery.com/machine-learning-data-transforms-for-time-series-forecasting/](https://machinelearningmastery.com/machine-learning-data-transforms-for-time-series-forecasting/) 時間序列數據通常需要在使用機器學習算法建模之前進行一些準備。 例如,差分運算可用于從序列中去除趨勢和季節結構,以簡化預測問題。一些算法(例如神經網絡)更喜歡在建模之前對數據進行標準化和/或標準化。 應用于該系列的任何變換操作也需要在預測上應用類似的逆變換。這是必需的,以便得到的計算表現度量與輸出變量的比例相同,并且可以與經典預測方法進行比較。 在這篇文章中,您將了解如何在機器學習中對時間序列數據執行和反轉四種常見數據轉換。 閱讀這篇文章后,你會知道: * 如何在 Python 中轉換和反轉四種方法的變換。 * 在訓練和測試數據集上使用變換時的重要注意事項。 * 在數據集上需要多個操作時建議的轉換順序。 讓我們開始吧。 ![4 Common Machine Learning Data Transforms for Time Series Forecasting](https://img.kancloud.cn/08/a6/08a6ca0244e0cd10a7bafdc068c69006_640x379.jpg) 用于時間序列預測的 4 種通用機器學習數據變換 照片由 [Wolfgang Staudt](https://www.flickr.com/photos/wolfgangstaudt/2200561848/) 拍攝,保留一些權利。 ## 概觀 本教程分為三個部分;他們是: 1. 時間序列數據的變換 2. 模型評估的考慮因素 3. 數據轉換順序 ## 時間序列數據的變換 給定單變量時間序列數據集,在使用機器學習方法進行建模和預測時,有四種變換很流行。 他們是: * 電力轉換 * 差異變換 * 標準化 * 正常化 讓我們依次快速瀏覽一下以及如何在 Python 中執行這些轉換。 我們還將審查如何反轉變換操作,因為當我們想要以原始比例評估預測時,這是必需的,以便可以直接比較表現度量。 您是否希望在時間序列數據上使用其他變換來進行機器學習方法的建模? 請在下面的評論中告訴我。 ### 電力轉換 [功率變換](https://en.wikipedia.org/wiki/Power_transform)從數據分布中移除偏移以使分布更正常(高斯分布)。 在時間序列數據集上,這可以消除隨時間變化的方差。 流行的例子是對數變換(正值)或廣義版本,例如 Box-Cox 變換(正值)或 Yeo-Johnson 變換(正值和負值)。 例如,我們可以使用 SciPy 庫中的 [boxcox()函數](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.boxcox.html)在 Python 中實現 Box-Cox 變換。 默認情況下,該方法將以數字方式優化變換的 lambda 值并返回最佳值。 ```py from scipy.stats import boxcox # define data data = ... # box-cox transform result, lmbda = boxcox(data) ``` 變換可以反轉,但需要一個名為 _invert_boxcox()_ 的下面列出的自定義函數,它接受一個變換值和用于執行變換的 lambda 值。 ```py from math import log from math import exp # invert a boxcox transform for one value def invert_boxcox(value, lam): # log case if lam == 0: return exp(value) # all other cases return exp(log(lam * value + 1) / lam) ``` 下面列出了將功率變換應用于數據集并反轉變換的完整示例。 ```py # example of power transform and inversion from math import log from math import exp from scipy.stats import boxcox # invert a boxcox transform for one value def invert_boxcox(value, lam): # log case if lam == 0: return exp(value) # all other cases return exp(log(lam * value + 1) / lam) # define dataset data = [x for x in range(1, 10)] print(data) # power transform transformed, lmbda = boxcox(data) print(transformed, lmbda) # invert transform inverted = [invert_boxcox(x, lmbda) for x in transformed] print(inverted) ``` 運行該示例將在轉換變換后打印原始數據集,冪變換的結果以及原始值(或接近它)。 ```py [1, 2, 3, 4, 5, 6, 7, 8, 9] [0\. 0.89887536 1.67448353 2.37952145 3.03633818 3.65711928 4.2494518 4.81847233 5.36786648] 0.7200338588580095 [1.0, 2.0, 2.9999999999999996, 3.999999999999999, 5.000000000000001, 6.000000000000001, 6.999999999999999, 7.999999999999998, 8.999999999999998] ``` ### 差異變換 差分變換是從時間序列中去除系統結構的簡單方法。 例如,可以通過從系列中的每個值中減去先前的值來消除趨勢。這稱為一階差分。可以重復該過程(例如差異系列)以消除二階趨勢,等等。 通過從前一季節中減去觀察值,可以以類似的方式去除季節性結構。 12 個步驟之前的月度數據與年度季節性結構。 可以使用下面列出的名為 _difference()_ 的自定義函數計算系列中的單個差異值。該函數采用時間序列和差值計算的間隔,例如, 1 表示趨勢差異,12 表示季節性差異。 ```py # difference dataset def difference(data, interval): return [data[i] - data[i - interval] for i in range(interval, len(data))] ``` 同樣,可以使用自定義函數反轉此操作,該函數將原始值添加回名為 _invert_difference()_ 的差值,該值采用原始序列和間隔。 ```py # invert difference def invert_difference(orig_data, diff_data, interval): return [diff_data[i-interval] + orig_data[i-interval] for i in range(interval, len(orig_data))] ``` 我們可以在下面演示這個功能。 ```py # example of a difference transform # difference dataset def difference(data, interval): return [data[i] - data[i - interval] for i in range(interval, len(data))] # invert difference def invert_difference(orig_data, diff_data, interval): return [diff_data[i-interval] + orig_data[i-interval] for i in range(interval, len(orig_data))] # define dataset data = [x for x in range(1, 10)] print(data) # difference transform transformed = difference(data, 1) print(transformed) # invert difference inverted = invert_difference(data, transformed, 1) print(inverted) ``` 運行該示例將打印原始數據集,差異變換的結果以及轉換后的原始值。 注意,變換后序列中的第一個“間隔”值將丟失。這是因為它們在“間隔”之前的時間步長沒有值,因此無法區分。 ```py [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 1, 1, 1, 1, 1, 1, 1] [2, 3, 4, 5, 6, 7, 8, 9] ``` ### 標準化 標準化是具有高斯分布的數據的變換。 它減去均值并將結果除以數據樣本的標準差。這具有將數據轉換為具有零或中心的均值的效果,其標準偏差為 1.這樣得到的分布稱為標準高斯分布,或標準法線,因此稱為變換的名稱。 我們可以使用 scikit-learn 庫中的 Python 中的 [StandardScaler](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html) 對象執行標準化。 此類允許通過調用 _fit()_ 將變換擬合到訓練數據集上,通過調用 _transform()_ 應用于一個或多個數據集(例如訓練和測試)并且還提供通過調用 _inverse_transform()_ 來反轉變換的函數。 下面應用完整的示例。 ```py # example of standardization from sklearn.preprocessing import StandardScaler from numpy import array # define dataset data = [x for x in range(1, 10)] data = array(data).reshape(len(data), 1) print(data) # fit transform transformer = StandardScaler() transformer.fit(data) # difference transform transformed = transformer.transform(data) print(transformed) # invert difference inverted = transformer.inverse_transform(transformed) print(inverted) ``` 運行該示例將打印原始數據集,標準化變換的結果以及轉換后的原始值。 請注意,期望數據作為具有多行的列提供。 ```py [[1] [2] [3] [4] [5] [6] [7] [8] [9]] [[-1.54919334] [-1.161895 [-0.77459667] [-0.38729833] [ 0\. [ 0.38729833] [ 0.77459667] [ 1.161895 [ 1.54919334]] [[1.] [2.] [3.] [4.] [5.] [6.] [7.] [8.] [9.]] ``` ### 正常化 規范化是將數據從原始范圍重新縮放到 0 到 1 之間的新范圍。 與標準化一樣,這可以使用 scikit-learn 庫中的轉換對象來實現,特別是 [MinMaxScaler](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html) 類。除了規范化之外,通過在對象的構造函數中指定首選范圍,此類可用于將數據重新縮放到您希望的任何范圍。 它可以以相同的方式用于擬合,變換和反轉變換。 下面列出了一個完整的例子。 ```py # example of normalization from sklearn.preprocessing import MinMaxScaler from numpy import array # define dataset data = [x for x in range(1, 10)] data = array(data).reshape(len(data), 1) print(data) # fit transform transformer = MinMaxScaler() transformer.fit(data) # difference transform transformed = transformer.transform(data) print(transformed) # invert difference inverted = transformer.inverse_transform(transformed) print(inverted) ``` 運行該示例將打印原始數據集,規范化轉換的結果以及轉換后的原始值。 ```py [[1] [2] [3] [4] [5] [6] [7] [8] [9]] [[0\. [0.125] [0.25 ] [0.375] [0.5 [0.625] [0.75 ] [0.875] [1\. ] [[1.] [2.] [3.] [4.] [5.] [6.] [7.] [8.] [9.]] ``` ## 模型評估的考慮因素 我們已經提到了能夠反轉模型預測變換的重要性,以便計算與其他方法直接相當的模型表現統計量。 另外,另一個問題是數據泄漏問題。 上述三個數據轉換來自提供的數據集的估計系數,然后用于轉換數據。特別: * **Power Transform** :lambda 參數。 * **標準化**:平均值和標準差統計量。 * **標準化**:最小值和最大值。 必須僅在訓練數據集上估計這些系數。 估計完成后,可以在評估模型之前使用系數對訓練和測試數據集應用變換。 如果在分割成訓練集和測試集之前使用整個數據集估計系數,則從測試集到訓練數據集的信息泄漏很小。這可能導致對樂觀偏見的模型技能的估計。 因此,您可能希望使用領域知識增強系數的估計值,例如將來所有時間的預期最小值/最大值。 通常,差分不會遇到相同的問題。在大多數情況下,例如一步預測,可以使用滯后觀察來執行差異計算。如果不是,則可以在任何需要的地方使用滯后預測作為差異計算中真實觀察的代理。 ## 數據轉換順序 您可能希望嘗試在建模之前將多個數據轉換應用于時間序列。 這很常見,例如應用冪變換以消除增加的方差,應用季節差異來消除季節性,并應用一步差分來移除趨勢。 應用轉換操作的順序很重要。 直覺上,我們可以思考變換如何相互作用。 * 應該在差分之前執行功率變換。 * 應在一步差分之前進行季節性差異。 * 標準化是線性的,應在任何非線性變換和差分后對樣本進行標準化。 * 標準化是線性操作,但它應該是為保持首選標度而執行的最終變換。 因此,建議的數據轉換順序如下: 1. 電力轉換。 2. 季節性差異。 3. 趨勢差異。 4. 標準化。 5. 正常化。 顯然,您只能使用特定數據集所需的變換。 重要的是,當變換操作被反轉時,必須反轉逆變換操作的順序。具體而言,必須按以下順序執行逆操作: 1. 正常化。 2. 標準化。 3. 趨勢差異。 4. 季節性差異。 5. 電力轉換。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 帖子 * [如何使用 Python 進行時間序列預測數據的電源轉換](https://machinelearningmastery.com/power-transform-time-series-forecast-data-python/) * [如何使用 Python 中的差異變換刪除趨勢和季節性](https://machinelearningmastery.com/remove-trends-seasonality-difference-transform-python/) * [如何區分時間序列數據集與 Python](https://machinelearningmastery.com/difference-time-series-dataset-python/) * [如何在 Python 中標準化和標準化時間序列數據](https://machinelearningmastery.com/normalize-standardize-time-series-data-python/) ### 蜜蜂 * [scipy.stats.boxcox API](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.boxcox.html) * [sklearn.preprocessing.MinMaxScaler API](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html) * [sklearn.preprocessing.StandardScaler API](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html) ### 用品 * [維基百科上的權力轉換](https://en.wikipedia.org/wiki/Power_transform) ## 摘要 在這篇文章中,您了解了如何在機器學習中對時間序列數據執行和反轉四種常見數據轉換。 具體來說,你學到了: * 如何在 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>

                              哎呀哎呀视频在线观看