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

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

更多深度文章剪返,請關(guān)注:https://yq.aliyun.com/cloud

機(jī)器學(xué)習(xí)算法無法直接用于數(shù)據(jù)分類。數(shù)據(jù)分類必須轉(zhuǎn)換為數(shù)字才能進(jìn)一步進(jìn)行倚搬。

在本教程中冶共,你將發(fā)現(xiàn)如何將輸入或輸出的序列數(shù)據(jù)轉(zhuǎn)換為一種熱編碼,以便于你在Python中深度學(xué)習(xí)的序列分類問題中使用每界。

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

·? ?1.什么是整數(shù)編碼和One-Hot編碼,以及為什么它們在機(jī)器學(xué)習(xí)中是必需的眨层。

·? ?2.如何在Python中手工計算一個整數(shù)編碼和One-Hot編碼庙楚。

·? ?3.如何使用scikit-learn和Keras庫來自動對Python中的序列數(shù)據(jù)進(jìn)行編碼。

本教程分為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位狀態(tài)寄存器來對N個狀態(tài)進(jìn)行編碼窜司,每個狀態(tài)都由他獨立的寄存器位沛善,并且在任意時候只有一位有效。

One-Hot編碼是分類變量作為二進(jìn)制向量的表示塞祈。這首先要求將分類值映射到整數(shù)值金刁。然后,每個整數(shù)值被表示為二進(jìn)制向量议薪,除了整數(shù)的索引之外尤蛮,它都是零值,它被標(biāo)記為1斯议。

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

讓我們用一個小例子來說明一下到底什么是One-Hot編碼产捞。假設(shè)我們有一個帶有'red'和'green'值的標(biāo)簽序列。我們可以將'red'的整數(shù)值分配為0哼御,'green'的整數(shù)值為1坯临。只要我們總是將這些數(shù)字分配給這些標(biāo)簽,這稱為整數(shù)編碼恋昼。一致性是重要的看靠,所以我們可以稍后反轉(zhuǎn)編碼,并從整數(shù)值獲取標(biāo)簽液肌。

接下來挟炬,我們可以創(chuàng)建一個二進(jìn)制向量來表示每個整數(shù)值。對于2個可能的整數(shù)值嗦哆,向量的長度為2谤祖。

編碼為0的“紅色”標(biāo)簽將用二進(jìn)制向量[1,0]表示,其中第0個索引被標(biāo)記為值1老速。然后粥喜,編碼為1的“綠色”標(biāo)簽將用一個二進(jìn)制向量[0,1]橘券,其中第一個索引被標(biāo)記為1容客。

如果我們有序列:

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

我們可以用整數(shù)編碼來表示它:

0约郁,0,1

而One-Hot編碼就為:

1

2

3

[1, 0]

[1, 0]

[0, 1]

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

One hot 編碼進(jìn)行數(shù)據(jù)的分類更準(zhǔn)確鬓梅,許多機(jī)器學(xué)習(xí)算法無法直接用于數(shù)據(jù)分類。數(shù)據(jù)的類別必須轉(zhuǎn)換成數(shù)字谨湘,對于分類的輸入和輸出變量都是一樣的绽快。

我們可以直接使用整數(shù)編碼芥丧,需要時重新調(diào)整。這可能適用于在類別之間存在自然關(guān)系的問題坊罢,例如溫度“冷”(0)和”熱“(1)的標(biāo)簽续担。

當(dāng)沒有關(guān)系時,可能會出現(xiàn)問題活孩,一個例子可能是標(biāo)簽的“狗”和“貓”物遇。

在這些情況下,我們想讓網(wǎng)絡(luò)更具表現(xiàn)力憾儒,為每個可能的標(biāo)簽值提供概率式數(shù)字询兴。這有助于進(jìn)行問題網(wǎng)絡(luò)建模。當(dāng)輸出變量使用one-hot編碼時起趾,它可以提供比單個標(biāo)簽更準(zhǔn)確的一組預(yù)測诗舰。

2.手動One Hot編碼:

在這個例子中,我們將假設(shè)我們有一個字符串的例子训裆,但是示例序列并不涵蓋所有可能的例子眶根。

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

Hello world。

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

完整的示例如下所示艺骂。

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值創(chuàng)建為整數(shù)值。然后使用該映射對輸入字符串進(jìn)行編碼钳恕。我們可以看到輸入'h'中的第一個字母被編碼為7别伏。然后將整數(shù)編碼轉(zhuǎn)換為one hot編碼。一次完成一個整數(shù)編碼的字符忧额。創(chuàng)建0個值的列表厘肮,以便字母表的長度可以表示任何預(yù)期的字符的長度。

接下來睦番,特定字符的索引標(biāo)記為1类茂。我們可以看到,編碼為7的第一個字母“h”整數(shù)由二進(jìn)制向量表示托嚣,長度為27巩检,第七個索引標(biāo)記為1。

最后示启,我們反轉(zhuǎn)第一個字母的編碼并打印結(jié)果兢哭。我們通過使用NumPy argmax()函數(shù)定位具有最大值的二進(jìn)制向量中的索引,然后使用字符值的反向查找表中的整數(shù)進(jìn)行整數(shù)夫嗓。

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

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冲秽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子矩父,更是在濱河造成了極大的恐慌锉桑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窍株,死亡現(xiàn)場離奇詭異民轴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)夹姥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門杉武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辙售,你說我怎么就攤上這事轻抱。” “怎么了旦部?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵祈搜,是天一觀的道長。 經(jīng)常有香客問我士八,道長容燕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任婚度,我火速辦了婚禮蘸秘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝗茁。我一直安慰自己醋虏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布哮翘。 她就那樣靜靜地躺著颈嚼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饭寺。 梳的紋絲不亂的頭發(fā)上阻课,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音艰匙,去河邊找鬼限煞。 笑死,一個胖子當(dāng)著我的面吹牛员凝,可吹牛的內(nèi)容都是我干的晰骑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼硕舆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骤公,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤抚官,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后阶捆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凌节,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年洒试,在試婚紗的時候發(fā)現(xiàn)自己被綠了倍奢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垒棋,死狀恐怖卒煞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叼架,我是刑警寧澤畔裕,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站乖订,受9級特大地震影響扮饶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乍构,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一甜无、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哥遮,春花似錦岂丘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至君仆,卻和暖如春翩概,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背返咱。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工钥庇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咖摹。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓评姨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吐句,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容