<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-one-hot-encode-sequence-data-in-python/](https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/) 機器學習算法不能直接使用分類數據。 必須將分類數據轉換為數字。 當您處理序列分類類型問題并計劃使用深度學習方法(如長期短期記憶循環神經網絡)時,這適用。 在本教程中,您將了解如何將輸入或輸出序列數據轉換為一個熱編碼,以便在Python中使用深度學習進行序列分類問題。 完成本教程后,您將了解: * 什么是整數編碼和一個熱編碼,以及為什么它們在機器學習中是必需的。 * 如何在Python中手動計算整數編碼和一個熱編碼。 * 如何使用scikit-learn和Keras庫在Python中自動編碼序列數據。 讓我們開始吧。 ![How to One Hot Encode Sequence Classification Data in Python](img/8213edb29ce473720ce6bb7f2f628a83.jpg) 如何在Python中使用熱編碼序列分類數據 照片由 [Elias Levy](https://www.flickr.com/photos/elevy/6997586997/) 拍攝,保留一些權利。 ## 教程概述 本教程分為4個部分;他們是: 1. 什么是一個熱編碼? 2. 手動一個熱編碼 3. 一個熱門編碼與scikit-learn 4. 一個熱門編碼與Keras ## 什么是一個熱編碼? 一種熱編碼是將分類變量表示為二進制向量。 這首先要求將分類值映射到整數值。 然后,每個整數值表示為二進制向量,除了整數的索引外,它都是零值,用1標記。 ### 一個熱編碼的工作示例 讓我們用一個有效的例子來具體化。 假設我們有一系列標簽,其值為“紅色”和“綠色”。 我們可以將'red'指定為整數值0,將'green'指定為整數值1.只要我們總是將這些數字指定給這些標簽,就稱為整數編碼。一致性很重要,以便我們可以稍后反轉編碼并從整數值返回標簽,例如在進行預測時。 接下來,我們可以創建一個二進制向量來表示每個整數值。對于2個可能的整數值,向量的長度為2。 編碼為0的“紅色”標簽將用二進制向量[1,0]表示,其中第零個索引用值1標記。反過來,編碼為1的“綠色”標簽將用二進制向量[0,1],其中第一個索引標記為值1。 如果我們有序列: ```py 'red', 'red', 'green' ``` 我們可以用整數編碼來表示它: ```py 0, 0, 1 ``` 和熱門編碼: ```py [1, 0] [1, 0] [0, 1] ``` ### 為什么要使用一個熱編碼? 一種熱編碼允許分類數據的表示更具表現力。 許多機器學習算法不能直接使用分類數據。必須將類別轉換為數字。這對于分類的輸入和輸出變量都是必需的。 我們可以直接使用整數編碼,在需要的地方重新調整。這可能適用于類別之間存在自然序數關系的問題,反過來又是整數值,例如溫度“冷”,“暖”和“熱”的標簽。 當沒有順序關系并且允許表示依賴于任何這樣的關系可能有損于學習解決問題時可能存在問題。一個例子可能是標簽'狗'和'貓' 在這些情況下,我們希望為網絡提供更具表現力的能力,以便為每個可能的標簽值學習類似概率的數字。這有助于使問題更容易讓網絡建模。當一個熱編碼用于輸出變量時,它可以提供比單個標簽更細微的預測集。 ## 手動一個熱編碼 在這個例子中,我們假設我們有一個字母字母的示例字符串,但示例序列并未涵蓋所有可能的示例。 我們將使用以下字符的輸入序列: ```py hello world ``` 我們假設所有可能輸入的范圍是小寫字符和空格的完整字母表。因此,我們將以此為借口演示如何推出自己的熱門編碼。 下面列出了完整的示例。 ```py from numpy import argmax # define input string data = 'hello world' print(data) # define universe of possible input values alphabet = 'abcdefghijklmnopqrstuvwxyz ' # define a mapping of chars to integers char_to_int = dict((c, i) for i, c in enumerate(alphabet)) int_to_char = dict((i, c) for i, c in enumerate(alphabet)) # integer encode input data integer_encoded = [char_to_int[char] for char in data] print(integer_encoded) # one hot encode onehot_encoded = list() for value in integer_encoded: letter = [0 for _ in range(len(alphabet))] letter[value] = 1 onehot_encoded.append(letter) print(onehot_encoded) # invert encoding inverted = int_to_char[argmax(onehot_encoded[0])] print(inverted) ``` 首先運行該示例打印輸入字符串。 從char值到整數值創建所有可能輸入的映射。然后使用該映射對輸入字符串進行編碼。我們可以看到輸入'h'中的第一個字母編碼為7,或者可能輸入值(字母表)數組中的索引7。 然后將整數編碼轉換為一個熱編碼。這是一次完成一個整數編碼字符。創建0值的列表,使用字母表的長度,以便可以表示任何預期的字符。 接下來,特定字符的索引標記為1.我們可以看到編碼為7的第一個字母'h'整數由長度為27且第7個索引標記為1的二進制向量表示。 最后,我們反轉第一個字母的編碼并打印結果。我們通過使用NumPy argmax()函數定位具有最大值的二進制向量中的索引,然后在字符值的反向查找表中使用整數值來實現此操作。 注意:輸出已格式化以便于閱讀。 ```py hello world [7, 4, 11, 11, 14, 26, 22, 14, 17, 11, 3] [[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] h ``` 現在我們已經看到了如何從頭開始編寫自己的熱編碼,讓我們看看如何在輸入序列完全捕獲預期輸入值范圍的情況下,使用scikit-learn庫自動執行此映射。 ## 一個熱門編碼與scikit-learn 在此示例中,我們假設您具有以下3個標簽的輸出序列: ```py "cold" "warm" "hot" ``` 10個時間步長的示例序列可以是: ```py cold, cold, warm, cold, hot, hot, warm, cold, warm, hot ``` 這將首先需要整數編碼,例如1,2,3。接下來是一個整數的熱編碼到具有3個值的二進制向量,例如[1,0,0]。 該序列提供序列中每個可能值的至少一個示例。因此,我們可以使用自動方法來定義標簽到整數和整數到二進制向量的映射。 在這個例子中,我們將使用scikit-learn庫中的編碼器。具體地, [LabelEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html) 創建標簽的整數編碼, [OneHotEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html) 用于創建整數編碼值的一個熱編碼。 The complete example is listed below. ```py from numpy import array from numpy import argmax from sklearn.preprocessing import LabelEncoder from sklearn.preprocessing import OneHotEncoder # define example data = ['cold', 'cold', 'warm', 'cold', 'hot', 'hot', 'warm', 'cold', 'warm', 'hot'] values = array(data) print(values) # integer encode label_encoder = LabelEncoder() integer_encoded = label_encoder.fit_transform(values) print(integer_encoded) # binary encode onehot_encoder = OneHotEncoder(sparse=False) integer_encoded = integer_encoded.reshape(len(integer_encoded), 1) onehot_encoded = onehot_encoder.fit_transform(integer_encoded) print(onehot_encoded) # invert first example inverted = label_encoder.inverse_transform([argmax(onehot_encoded[0, :])]) print(inverted) ``` 首先運行該示例將打印標簽序列。接下來是標簽的整數編碼,最后是一個熱編碼。 訓練數據包含所有可能示例的集合,因此我們可以依賴整數和一個熱編碼變換來創建標簽到編碼的完整映射。 默認情況下,OneHotEncoder類將返回更有效的稀疏編碼。這可能不適合某些應用程序,例如與Keras深度學習庫一起使用。在這種情況下,我們通過設置 _sparse = False_ 參數來禁用稀疏返回類型。 如果我們在這個3值熱編碼中接收到預測,我們可以輕松地將變換反轉回原始標簽。 首先,我們可以使用argmax()NumPy函數來定位具有最大值的列的索引。然后可以將其饋送到LabelEncoder以計算反向變換回文本標簽。 這在示例的結尾處被證明,其中第一個熱編碼示例的逆變換返回到標簽值'cold'。 再次注意,輸入的格式是為了便于閱讀。 ```py ['cold' 'cold' 'warm' 'cold' 'hot' 'hot' 'warm' 'cold' 'warm' 'hot'] [0 0 2 0 1 1 2 0 2 1] [[ 1\. 0\. 0.] [ 1\. 0\. 0.] [ 0\. 0\. 1.] [ 1\. 0\. 0.] [ 0\. 1\. 0.] [ 0\. 1\. 0.] [ 0\. 0\. 1.] [ 1\. 0\. 0.] [ 0\. 0\. 1.] [ 0\. 1\. 0.]] ['cold'] ``` 在下一個示例中,我們將看看如何直接對一個整數值序列進行熱編碼。 ## 一個熱門編碼與Keras 您可能有一個已經整數編碼的序列。 在進行一些縮放之后,您可以直接使用整數。或者,您可以直接對整數進行熱編碼。如果整數沒有真正的序數關系并且實際上只是標簽的占位符,則需要考慮這一點。 Keras庫提供了一個名為 [to_categorical()](https://keras.io/utils/#to_categorical)的函數,您可以將其用于一個熱編碼整數數據。 在這個例子中,我們有4個整數值[0,1,2,3],我們有以下10個數字的輸入序列: ```py data = [1, 3, 2, 0, 3, 2, 2, 1, 0, 1] ``` 序列有一個所有已知值的示例,因此我們可以直接使用to_categorical()函數。或者,如果序列從0開始(從0開始)并且不代表所有可能的值,我們可以指定num_classes參數 _to_categorical(num_classes = 4)_。 下面列出了此功能的完整示例。 ```py from numpy import array from numpy import argmax from keras.utils import to_categorical # define example data = [1, 3, 2, 0, 3, 2, 2, 1, 0, 1] data = array(data) print(data) # one hot encode encoded = to_categorical(data) print(encoded) # invert encoding inverted = argmax(encoded[0]) print(inverted) ``` 首先運行示例定義并打印輸入序列。 然后將整數編碼為二進制向量并打印。我們可以看到第一個整數值1被編碼為[0,1,0,0],就像我們期望的那樣。 然后,我們通過在序列中的第一個值上使用NumPy argmax()函數來反轉編碼,該函數返回第一個整數的期望值1。 ```py [1 3 2 0 3 2 2 1 0 1] [[ 0\. 1\. 0\. 0.] [ 0\. 0\. 0\. 1.] [ 0\. 0\. 1\. 0.] [ 1\. 0\. 0\. 0.] [ 0\. 0\. 0\. 1.] [ 0\. 0\. 1\. 0.] [ 0\. 0\. 1\. 0.] [ 0\. 1\. 0\. 0.] [ 1\. 0\. 0\. 0.] [ 0\. 1\. 0\. 0.]] 1 ``` ## 進一步閱讀 本節列出了一些可供進一步閱讀的資源。 * [什么是熱門編碼,什么時候用于數據科學? Quora上的](https://www.quora.com/What-is-one-hot-encoding-and-when-is-it-used-in-data-science) * [OneHotEncoder scikit-learn API文檔](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html) * [LabelEncoder scikit-learn API文檔](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html) * [to_categorical Keras API文檔](https://keras.io/utils/#to_categorical) * [Python中使用XGBoost進行梯度提升的數據準備](http://machinelearningmastery.com/data-preparation-gradient-boosting-xgboost-python/) * [Keras深度學習庫的多類分類教程](http://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/) ## 摘要 在本教程中,您了解了如何使用Python中的一個熱編碼對分類序列數據進行編碼以進行深度學習。 具體來說,你學到了: * 什么是整數編碼和一個熱編碼,以及為什么它們在機器學習中是必需的。 * 如何在Python中手動計算整數編碼和一個熱編碼。 * 如何使用scikit-learn和Keras庫在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>

                              哎呀哎呀视频在线观看