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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何在 Python 中規范化和標準化時間序列數據 > 原文: [https://machinelearningmastery.com/normalize-standardize-time-series-data-python/](https://machinelearningmastery.com/normalize-standardize-time-series-data-python/) 如果您的時間序列數據具有一致的比例或分布,則某些機器學習算法將獲得更好的表現。 可用于一致地重新縮放時間序列數據的兩種技術是規范化和標準化。 在本教程中,您將了解如何將規范化和標準化重新縮放應用于 Python 中的時間序列數據。 完成本教程后,您將了解: * 使用標準化的數據的規范化和期望的局限性。 * 需要什么參數以及如何手動計算標準化和標準化值。 * 如何使用 Python 中的 scikit-learn 來標準化和標準化您的時間序列數據。 讓我們開始吧。 ![How to Normalize and Standardize Time Series Data in Python](https://img.kancloud.cn/a0/77/a07791dfa0c3c8f841cc75f6b3f068f4_640x513.jpg) 如何在 Python 中標準化和標準化時間序列數據 照片由 [Sage Ross](https://www.flickr.com/photos/ragesoss/5773993299/) 拍攝,保留一些權利。 ## 最低每日溫度數據集 該數據集描述了澳大利亞墨爾本市 10 年(1981-1990)的最低日常溫度。 單位為攝氏度,有 3,650 個觀測值。數據來源被稱為澳大利亞氣象局。 下面是前 5 行數據的示例,包括標題行。 ```py "Date","Temperatures" "1981-01-01",20.7 "1981-01-02",17.9 "1981-01-03",18.8 "1981-01-04",14.6 "1981-01-05",15.8 ``` 下面是從數據市場獲取的整個數據集的圖表。 ![Minimum Daily Temperatures](https://img.kancloud.cn/a2/09/a209bd3b69a5ae4c7c140dd5bb73ac1f_713x375.jpg) 最低每日溫度 該數據集顯示了一個強大的季節性組件,并具有良好,細粒度的細節。 [在此處下載并了解有關數據集的更多信息](https://datamarket.com/data/set/2324/daily-minimum-temperatures-in-melbourne-australia-1981-1990)。 本教程假定數據集位于當前工作目錄中,文件名為“ **daily-minimum-temperature-in-me.csv** ”。 **注意**:下載的文件包含一些問號(“?”)字符,必須先將其刪除才能使用數據集。在文本編輯器中打開文件并刪除“?”字符。同時刪除文件中的任何頁腳信息。 ## 標準化時間序列數據 歸一化是對原始范圍內的數據進行重新縮放,以使所有值都在 0 和 1 的范圍內。 當你的時間序列數據具有不同尺度的輸入值時,歸一化可能是有用的,甚至在某些機器學習算法中也是必需的。對于算法,例如 k-最近鄰,它使用距離計算和線性回歸和人工神經網絡可能需要歸一化。重量輸入值。 標準化要求您知道或能夠準確估計最小和最大可觀察值。您可以從可用數據中估算這些值。如果您的時間序列趨勢向上或向下,估計這些預期值可能會很困難,并且規范化可能不是用于解決問題的最佳方法。 值按如下標準化: ```py y = (x - min) / (max - min) ``` 其中最小值和最大值與值 **x** 歸一化有關。 例如,對于溫度數據,我們可以將最小和最大可觀察值猜測為 30 和-10,這些值大大超過和低估。然后我們可以將 18.8 之類的任何值標準化,如下所示: ```py y = (x - min) / (max - min) y = (18.8 - -10) / (30 - -10) y = 28.8 / 40 y = 0.72 ``` 您可以看到,如果提供的 **x** 值超出最小值和最大值的范圍,則結果值將不在 0 和 1 的范圍內。您可以先檢查這些觀察結果進行預測并從數據集中刪除它們或將它們限制為預定義的最大值或最小值。 您可以使用 scikit-learn 對象 [MinMaxScaler](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html) 來規范化數據集。 _MinMaxScaler_ 和其他重新縮放技術的良好實踐用法如下: 1. **使用可用的訓練數據**調整定標器。對于歸一化,這意味著訓練數據將用于估計最小和最大可觀察值。這是通過調用 _fit()_ 函數來完成的, 2. **將比例應用于訓練數據**。這意味著您可以使用標準化數據來訓練模型。這是通過調用 _transform()_ 函數來完成的 3. **將比例應用于前進的數據**。這意味著您可以在將來準備要預測的新數據。 如果需要,可以反轉變換。這對于將預測轉換回其原始比例以進行報告或繪圖非常有用。這可以通過調用 _inverse_transform()_ 函數來完成。 以下是標準化每日最低溫度數據集的示例。 縮放器要求將數據作為行和列的矩陣提供。加載的時間序列數據作為 Pandas _ 系列 _ 加載。然后必須將其重新整形為具有 3,650 行的一列矩陣。 然后使用重新整形的數據集來擬合縮放器,對數據集進行歸一化,然后反轉歸一化變換以再次顯示原始值。 ```py # Normalize time series data from pandas import Series from sklearn.preprocessing import MinMaxScaler # load the dataset and print the first 5 rows series = Series.from_csv('daily-minimum-temperatures-in-me.csv', header=0) print(series.head()) # prepare data for normalization values = series.values values = values.reshape((len(values), 1)) # train the normalization scaler = MinMaxScaler(feature_range=(0, 1)) scaler = scaler.fit(values) print('Min: %f, Max: %f' % (scaler.data_min_, scaler.data_max_)) # normalize the dataset and print the first 5 rows normalized = scaler.transform(values) for i in range(5): print(normalized[i]) # inverse transform and print the first 5 rows inversed = scaler.inverse_transform(normalized) for i in range(5): print(inversed[i]) ``` 運行該示例將從已加載的數據集中打印前 5 行,以其標準化形式顯示相同的 5 個值,然后使用逆變換將值返回其原始比例。 我們還可以看到數據集的最小值和最大值分別為 0 和 26.3。 ```py Date 1981-01-01 20.7 1981-01-02 17.9 1981-01-03 18.8 1981-01-04 14.6 1981-01-05 15.8 Name: Temp, dtype: float64 Min: 0.000000, Max: 26.300000 [ 0.78707224] [ 0.68060837] [ 0.7148289] [ 0.55513308] [ 0.60076046] [ 20.7] [ 17.9] [ 18.8] [ 14.6] [ 15.8] ``` 還有另一種類型的重新縮放對于超出預期值范圍的新值更加穩健;這稱為標準化。我們接下來會看一下。 ## 標準化時間序列數據 標準化數據集涉及重新調整值的分布,以便觀察值的平均值為 0,標準差為 1。 這可以被認為是減去平均值或使數據居中。 與標準化一樣,當您的時間序列數據具有不同比例的輸入值時,標準化可能是有用的,甚至在某些機器學習算法中也是必需的。 標準化假定您的觀察結果符合高斯分布(鐘形曲線),具有良好的平均值和標準偏差。如果不滿足此期望,您仍然可以標準化時間序列數據,但可能無法獲得可靠的結果。 這包括支持向量機,線性和邏輯回歸等算法,以及其他假設或使用高斯數據提高表現的算法。 標準化要求您知道或能夠準確估計可觀察值的均值和標準差。您可以從訓練數據中估算這些值。 值標準化如下: ```py y = (x - mean) / standard_deviation ``` _ 表示 _ 的計算方法如下: ```py mean = sum(x) / count(x) ``` _standard_deviation_ 計算如下: ```py standard_deviation = sqrt( sum( (x - mean)^2 ) / count(x)) ``` 例如,我們可以繪制最低每日溫度數據集的直方圖,如下所示: ```py from pandas import Series from matplotlib import pyplot series = Series.from_csv('daily-minimum-temperatures-in-me.csv', header=0) series.hist() pyplot.show() ``` 運行代碼會給出以下圖表,該圖表顯示數據集的高斯分布,如標準化所假設的那樣。 ![Minimum Daily Temperatures Histogram](https://img.kancloud.cn/4f/c2/4fc27a22cf6739191f8437f518db4e9e_800x600.jpg) 最低每日溫度直方圖 我們可以估計平均溫度為 10,標準偏差約為 5.使用這些值,我們可以將數據集中的第一個值標準化為 20.7,如下所示: ```py y = (x - mean) / standard_deviation y = (20.7 - 10) / 5 y = (10.7) / 5 y = 2.14 ``` 數據集的均值和標準差估計值對于新數據可能比最小值和最大值更穩健。 您可以使用 scikit-learn 對象 [StandardScaler](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html) 標準化數據集。 以下是標準化每日最低溫度數據集的示例。 ```py # Standardize time series data from pandas import Series from sklearn.preprocessing import StandardScaler from math import sqrt # load the dataset and print the first 5 rows series = Series.from_csv('daily-minimum-temperatures-in-me.csv', header=0) print(series.head()) # prepare data for standardization values = series.values values = values.reshape((len(values), 1)) # train the standardization scaler = StandardScaler() scaler = scaler.fit(values) print('Mean: %f, StandardDeviation: %f' % (scaler.mean_, sqrt(scaler.var_))) # standardization the dataset and print the first 5 rows normalized = scaler.transform(values) for i in range(5): print(normalized[i]) # inverse transform and print the first 5 rows inversed = scaler.inverse_transform(normalized) for i in range(5): print(inversed[i]) ``` 運行該示例將打印數據集的前 5 行,打印標準化的相同值,然后以原始比例打印值。 我們可以看到估計的平均值和標準偏差分別為 11.1 和 4.0。 ```py Date 1981-01-01 20.7 1981-01-02 17.9 1981-01-03 18.8 1981-01-04 14.6 1981-01-05 15.8 Name: Temp, dtype: float64 Mean: 11.177753, StandardDeviation: 4.071279 [ 2.33888328] [ 1.65113873] [ 1.87219948] [ 0.84058266] [ 1.13533032] [ 20.7] [ 17.9] [ 18.8] [ 14.6] [ 15.8] ``` ## 摘要 在本教程中,您了解了如何在 Python 中規范化和標準化時間序列數據。 具體來說,你學到了: * 一些機器學習算法在建模時表現更好甚至需要重新調整數據。 * 如何手動計算規范化和標準化所需的參數。 * 如何使用 Python 中的 scikit-learn 對時間序列數據進行標準化和標準化。 您對重新縮短時間序列數據或此帖子有任何疑問嗎? 在評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看