<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/how-to-scale-data-for-long-short-term-memory-networks-in-python/](https://machinelearningmastery.com/how-to-scale-data-for-long-short-term-memory-networks-in-python/) 在訓練神經網絡時,可能需要縮放序列預測問題的數據,例如長期短期記憶復現神經網絡。 當網絡適合具有一系列值的非縮放數據(例如,數量在 10 到 100 之間)時,大輸入可能會減慢網絡的學習和收斂速度,并且在某些情況下會妨礙網絡有效地學習問題。 在本教程中,您將了解如何規范化和標準化序列預測數據,以及如何確定將哪個用于輸入和輸出變量。 完成本教程后,您將了解: * 如何在 Python 中規范化和標準化序列數據。 * 如何為輸入和輸出變量選擇適當的縮放。 * 縮放序列數據時的實際考慮因素 讓我們開始吧。 ![How to Scale Data for Long Short-Term Memory Networks in Python](https://img.kancloud.cn/2f/7b/2f7b16bfc775e729a4dd1bc3170c9339_640x424.jpg) 如何在 Python 中擴展長短期內存網絡的數據 圖片來自 [Mathias Appel](https://www.flickr.com/photos/mathiasappel/25527849934/) ,保留一些權利。 ## 教程概述 本教程分為 4 個部分;他們是: 1. 縮放系列數據 2. 縮放輸入變量 3. 縮放輸出變量 4. 縮放時的實際考慮因素 ## 在 Python 中擴展系列數據 您可能需要考慮兩種類型的系列縮放:規范化和標準化。 這些都可以使用 scikit-learn 庫來實現。 ### 規范化系列數據 歸一化是對原始范圍內的數據進行重新縮放,以使所有值都在 0 和 1 的范圍內。 標準化要求您知道或能夠準確估計最小和最大可觀察值。您可以從可用數據中估算這些值。如果您的時間序列趨勢向上或向下,估計這些預期值可能會很困難,并且規范化可能不是用于解決問題的最佳方法。 值按如下標準化: ```py y = (x - min) / (max - min) ``` 其中最小值和最大值與值 x 被歸一化有關。 例如,對于數據集,我們可以將 min 和 max 可觀察值猜測為 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 和其他縮放技術的良好實踐用法如下: * **使用可用的訓練數據**調整定標器。對于歸一化,這意味著訓練數據將用于估計最小和最大可觀察值。這是通過調用 fit()函數完成的。 * **將比例應用于訓練數據**。這意味著您可以使用標準化數據來訓練模型。這是通過調用 transform()函數完成的。 * **將比例應用于前進的數據**。這意味著您可以在將來準備要預測的新數據。 如果需要,可以反轉變換。這對于將預測轉換回其原始比例以進行報告或繪圖非常有用。這可以通過調用 inverse_transform()函數來完成。 下面是一個標準化 10 個量的人為序列的例子。 縮放器對象要求將數據作為行和列的矩陣提供。加載的時間序列數據作為 Pandas 系列加載。 ```py from pandas import Series from sklearn.preprocessing import MinMaxScaler # define contrived series data = [10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0] series = Series(data) print(series) # 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 normalized = scaler.transform(values) print(normalized) # inverse transform and print inversed = scaler.inverse_transform(normalized) print(inversed) ``` 運行該示例打印序列,打印從序列估計的最小值和最大值,打印相同的標準化序列,然后使用逆變換將值返回到其原始比例。 我們還可以看到數據集的最小值和最大值分別為 10.0 和 100.0。 ```py 0 10.0 1 20.0 2 30.0 3 40.0 4 50.0 5 60.0 6 70.0 7 80.0 8 90.0 9 100.0 Min: 10.000000, Max: 100.000000 [[ 0\. ] [ 0.11111111] [ 0.22222222] [ 0.33333333] [ 0.44444444] [ 0.55555556] [ 0.66666667] [ 0.77777778] [ 0.88888889] [ 1\. ]] [[ 10.] [ 20.] [ 30.] [ 40.] [ 50.] [ 60.] [ 70.] [ 80.] [ 90.] [ 100.]] ``` ### 標準化系列數據 標準化數據集涉及重新調整值的分布,以便觀察值的平均值為 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)) ``` 我們可以猜測平均值為 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 from pandas import Series from sklearn.preprocessing import StandardScaler from math import sqrt # define contrived series data = [1.0, 5.5, 9.0, 2.6, 8.8, 3.0, 4.1, 7.9, 6.3] series = Series(data) print(series) # prepare data for normalization values = series.values values = values.reshape((len(values), 1)) # train the normalization scaler = StandardScaler() scaler = scaler.fit(values) print('Mean: %f, StandardDeviation: %f' % (scaler.mean_, sqrt(scaler.var_))) # normalize the dataset and print standardized = scaler.transform(values) print(standardized) # inverse transform and print inversed = scaler.inverse_transform(standardized) print(inversed) ``` 運行該示例打印序列,打印從序列估計的平均值和標準差,打印標準化值,然后以原始比例打印值。 我們可以看到估計的平均值和標準偏差分別約為 5.3 和 2.7。 ```py 0 1.0 1 5.5 2 9.0 3 2.6 4 8.8 5 3.0 6 4.1 7 7.9 8 6.3 Mean: 5.355556, StandardDeviation: 2.712568 [[-1.60569456] [ 0.05325007] [ 1.34354035] [-1.01584758] [ 1.26980948] [-0.86838584] [-0.46286604] [ 0.93802055] [ 0.34817357]] [[ 1\. ] [ 5.5] [ 9\. ] [ 2.6] [ 8.8] [ 3\. ] [ 4.1] [ 7.9] [ 6.3]] ``` ## 縮放輸入變量 輸入變量是網絡在輸入或可見層上進行的預測。 一個好的經驗法則是輸入變量應該是小值,可能在 0-1 范圍內,或者標準化為零均值和標準差為 1。 輸入變量是否需要縮放取決于問題和每個變量的具體情況。我們來看一些例子。 ### 分類輸入 您可能有一系列分類輸入,例如字母或狀態。 通常,分類輸入首先是整數編碼,然后是一個熱編碼。也就是說,為每個不同的可能輸入分配唯一的整數值,然后使用 1 和 0 的二進制向量來表示每個整數值。 根據定義,一個熱編碼將確保每個輸入是一個小的實際值,在這種情況下為 0.0 或 1.0。 ### 實值輸入 您可能有一系列數量作為輸入,例如價格或溫度。 如果數量的分布是正常的,則應該標準化,否則系列應該標準化。如果數值范圍很大(10s 100s 等)或小(0.01,0.0001),則適用。 如果數量值很小(接近 0-1)并且分布有限(例如標準偏差接近 1),那么也許你可以在沒有縮放系列的情況下逃脫。 ### 其他輸入 問題可能很復雜,如何最好地擴展輸入數據可能并不清楚。 如果有疑問,請將輸入序列標準化。如果您擁有這些資源,請使用原始數據,標準化數據和標準化來探索建模,并查看是否存在有益的差異。 > 如果輸入變量是線性組合的,就像在 MLP [多層感知器]中一樣,那么至少在理論上很少有必要對輸入進行標準化。 ......但是,有很多實際的原因可以解釋為什么標準化輸入可以使訓練更快,并減少陷入局部最優的機會。 - [我應該規范化/標準化/重新縮放數據嗎?](ftp://ftp.sas.com/pub/neural/FAQ2.html#A_std) 神經網絡常見問題解答 ## 縮放輸出變量 輸出變量是網絡預測的變量。 您必須確保輸出變量的比例與網絡輸出層上的激活功能(傳遞函數)的比例相匹配。 > 如果輸出激活函數的范圍為[0,1],那么顯然您必須確保目標值位于該范圍內。但通常最好選擇適合目標分布的輸出激活函數,而不是強制數據符合輸出激活函數。 - [我應該規范化/標準化/重新縮放數據嗎?](ftp://ftp.sas.com/pub/neural/FAQ2.html#A_std) 神經網絡常見問題解答 以下啟發式方法應涵蓋大多數序列預測問題: ### 二元分類問題 如果您的問題是二元分類問題,那么輸出將是類值 0 和 1.這最好使用輸出層上的 sigmoid 激活函數建模。輸出值將是介于 0 和 1 之間的實數值,可以捕捉到清晰的值。 ### 多類分類問題 如果您的問題是多類分類問題,那么輸出將是一個介于 0 和 1 之間的二進制類值的向量,每個類值一個輸出。這最好使用輸出層上的 softmax 激活功能建模。同樣,輸出值將是介于 0 和 1 之間的實數值,可以捕捉到清晰的值。 ### 回歸問題 如果您的問題是回歸問題,那么輸出將是實際值。這最好使用線性激活功能建模。如果值的分布正常,則可以標準化輸出變量。否則,可以對輸出變量進行標準化。 ### 其他問題 可以在輸出層上使用許多其他激活函數,并且您的問題的細節可能會增加混淆。 經驗法則是確保網絡輸出與數據規模相匹配。 ## 縮放時的實際考慮因素 縮放序列數據時有一些實際考慮因素。 * **估算系數**。您可以從訓練數據中估算系數(標準化的最小值和最大值或標準化的平均值和標準偏差)。檢查這些首先估算并使用領域知識或領域專家來幫助改進這些估算,以便將來對所有數據進行有用的更正。 * **保存系數**。您將需要以與用于訓練模型的數據完全相同的方式對未來的新數據進行標準化。保存用于存檔的系數,并在需要在進行預測時擴展新數據時加載它們。 * **數據分析**。使用數據分析可以幫助您更好地了解數據。例如,一個簡單的直方圖可以幫助您快速了解數量的分布情況,看看標準化是否有意義。 * **縮放每個系列**。如果您的問題有多個系列,請將每個系列視為單獨的變量,然后分別對其進行縮放。 * **在合適的時間縮放**。在正確的時間應用任何縮放變換非常重要。例如,如果您有一系列非靜止的數量,則在首次使數據靜止后進行縮放可能是合適的。在將系列轉換為監督學習問題后對其進行擴展是不合適的,因為每個列的處理方式不同,這是不正確的。 * **如果懷疑**則縮放。您可能需要重新調整輸入和輸出變量。如果有疑問,至少要對數據進行標準化。 ## 進一步閱讀 本節列出了擴展時要考慮的一些其他資源。 * [我應該規范化/標準化/重新調整數據嗎?](ftp://ftp.sas.com/pub/neural/FAQ2.html#A_std) 神經網絡常見問題解答 * [MinMaxScaler scikit-learn API 文檔](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html) * [StandardScaler scikit-learn API 文檔](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html) * [如何使用 Python 從頭開始擴展機器學習數據](http://machinelearningmastery.com/scale-machine-learning-data-scratch-python/) * [如何在 Python 中標準化和標準化時間序列數據](http://machinelearningmastery.com/normalize-standardize-time-series-data-python/) * [如何使用 Scikit-Learn 為 Python 機器學習準備數據](http://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/) ## 摘要 在本教程中,您了解了在使用長短期記憶復現神經網絡時如何擴展序列預測數據。 具體來說,你學到了: * 如何在 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>

                              哎呀哎呀视频在线观看