大神手把手教你:(Python)序列數據的One Hot編碼


摘要: 不懂One Hot編碼?讓大神手把手教你(文中代碼可以直接運行),用小例子清晰明了的帶你進入One hot 編碼!

更多深度文章,請關注:https://yq.aliyun.com/cloud

機器學習算法無法直接用於數據分類。數據分類必須轉換為數字才能進一步進行。

在本教程中,你將發現如何將輸入或輸出的序列數據轉換為一種熱編碼,以便於你在Python中深度學習的序列分類問題中使用。

看完本教程后,你將會了解:

·   1.什么是整數編碼和One-Hot編碼,以及為什么它們在機器學習中是必需的。

·   2.如何在Python中手工計算一個整數編碼和One-Hot編碼。

·   3.如何使用scikit-learn和Keras庫來自動對Python中的序列數據進行編碼。

本教程分為4部分:

1.什么是One-Hot編碼?

2.手動編寫One-Hot編碼

3.One-Hot Encode with scikit-learn.

4.One-Hot Encode with Keras.

1.什么是One-Hot編碼?

One-Hot編碼,又稱為一位有效編碼,主要是采用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,並且在任意時候只有一位有效。

One-Hot編碼是分類變量作為二進制向量的表示。這首先要求將分類值映射到整數值。然后,每個整數值被表示為二進制向量,除了整數的索引之外,它都是零值,它被標記為1。

2.One-Hot編碼的工作示例

讓我們用一個小例子來說明一下到底什么是One-Hot編碼。假設我們有一個帶有'red'和'green'值的標簽序列。我們可以將'red'的整數值分配為0,'green'的整數值為1。只要我們總是將這些數字分配給這些標簽,這稱為整數編碼。一致性是重要的,所以我們可以稍后反轉編碼,並從整數值獲取標簽。

接下來,我們可以創建一個二進制向量來表示每個整數值。對於2個可能的整數值,向量的長度為2。

編碼為0的“紅色”標簽將用二進制向量[1,0]表示,其中第0個索引被標記為值1。然后,編碼為1的“綠色”標簽將用一個二進制向量[0,1],其中第一個索引被標記為1。

如果我們有序列:

‘red’,‘red’,‘green’。

我們可以用整數編碼來表示它:

0,0,1

而One-Hot編碼就為:

1

2

3

[1, 0]

[1, 0]

[0, 1]

1.為什么要使用One-Hot編碼?

One hot 編碼進行數據的分類更准確,許多機器學習算法無法直接用於數據分類。數據的類別必須轉換成數字,對於分類的輸入和輸出變量都是一樣的。

我們可以直接使用整數編碼,需要時重新調整。這可能適用於在類別之間存在自然關系的問題,例如溫度“冷”(0)和”熱“(1)的標簽。

當沒有關系時,可能會出現問題,一個例子可能是標簽的“狗”和“貓”。

在這些情況下,我們想讓網絡更具表現力,為每個可能的標簽值提供概率式數字。這有助於進行問題網絡建模。當輸出變量使用one-hot編碼時,它可以提供比單個標簽更准確的一組預測。

2.手動One Hot編碼:

在這個例子中,我們將假設我們有一個字符串的例子,但是示例序列並不涵蓋所有可能的例子。

我們將使用以下字符的輸入序列:

Hello world。

我們將假設所有可能輸入是小寫字母和空格的完整字母表。因此,我們將以此展示如何滾動我們自己的one hot編碼。

完整的示例如下所示。

 

運行示例首先打印輸入字符串。

所有可能的輸入的映射都是從char值創建為整數值。然后使用該映射對輸入字符串進行編碼。我們可以看到輸入'h'中的第一個字母被編碼為7。然后將整數編碼轉換為one hot編碼。一次完成一個整數編碼的字符。創建0個值的列表,以便字母表的長度可以表示任何預期的字符的長度。

接下來,特定字符的索引標記為1。我們可以看到,編碼為7的第一個字母“h”整數由二進制向量表示,長度為27,第七個索引標記為1。

最后,我們反轉第一個字母的編碼並打印結果。我們通過使用NumPy argmax()函數定位具有最大值的二進制向量中的索引,然后使用字符值的反向查找表中的整數進行整數。

注意:輸出格式化為可讀性(我們將空格默認設置為z)。

原文鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM