[譯] 在機器學習中爲何要進行 One-Hot 編碼

在機器學習中爲何要進行 One-Hot 編碼?

入門機器學習應用,尤爲是須要對實際數據進行處理時,是很困難的。前端

通常來講,機器學習教程會推薦你或要求你,在開始擬合模型以前,先以特定的方式準備好數據。python

其中,一個很好的例子就是對類別數據(Categorical data)進行 One-Hot 編碼(又稱獨熱編碼)。android

  • 爲何 One-Hot 編碼是必要的?
  • 爲何你不能直接使用數據來擬合模型?

在本文中,你將獲得上述重要問題的答案,並能更好地理解機器學習應用中的數據準備工做。ios

什麼是類別數據?

類別數據是一種只有標籤值而沒有數值的變量。git

它的值一般屬於一個大小固定且有限的集合。github

類別變量也常被稱爲標稱值(nominal)算法

下面舉例說明:後端

  • 寵物(pet)變量包含如下幾種值:狗(dog)、貓(cat)。
  • 顏色(color)變量包含如下幾種值:紅(red)、綠(green)、藍(blue)。
  • 位次(place)變量包含如下幾種值:第一(first)、第二(second)和第三(third)。

以上例子中的每一個值都表明着一個不一樣的類別。bash

有些類別彼此間存在必定的天然關係,好比天然的排序關係。機器學習

上述例子中,位次(place)變量的值就有這種天然的排序關係。這種變量被稱爲序數變量(ordinal variable)。

類別數據有什麼問題?

有些算法能夠直接應用於類別數據。

好比,你能夠不進行任何數據轉換,將決策樹算法直接應用於類別數據上(取決於具體實現方式)。

但還有許多機器學習算法並不能直接操做標籤數據。這些算法要求全部的輸入輸出變量都是數值(numeric)。

一般來講,這種限制主要是由於這些機器學習算法的高效實現形成的,而不是算法自己的限制。

但這也意味着咱們須要把類別數據轉換成數值形式。若是輸出變量是類別變量,那你可能還得將模型的預測值轉換回類別形式,以便在一些應用中展現或使用它們。

如何將類別數據轉換成數值數據?

這包含兩個步驟:

  1. 整數編碼
  2. One-Hot 編碼

1. 整數編碼

第一步,先要給每一個類別值都分配一個整數值。

好比,用 1 表示紅色(red),2 表示綠色(green),3 表示藍色(blue)。

這種方式被稱爲標籤編碼或者整數編碼,能夠很輕鬆地將它還原回類別值。

對於某些變量來講,這種編碼就足夠了。

整數之間存在天然的排序關係,機器學習算法也許能夠理解並利用這種關係。

好比,前面的位次(place)例子中的序數變量就是一個很好的例子。對於它咱們只須要進行標籤編碼就夠了。

2. One-Hot 編碼

但對於不存在次序關係的類別變量,僅使用上述的整數編碼是不夠的。

實際上,使用整數編碼會讓模型假設類別間存在天然的次序關係,從而致使結果不佳或獲得意外的結果(預測值落在兩個類別的中間)。

這種狀況下,就要對整數表示使用 One-Hot 編碼了。One-Hot 編碼會去除整數編碼,併爲每一個整數值都建立一個二值變量。

在顏色(color)的示例中,有 3 種類別,所以須要 3 個二值變量進行編碼。對應的顏色位置上將被標爲「1」,其它顏色位置上會被標爲「0」。

好比:

red, green, blue
1, 0, 0
0, 1, 0
0, 0, 1
複製代碼

在統計學等領域中,這種二值變量一般被稱爲「虛擬變量」或「啞變量」(dummy variable)。

One-Hot 編碼教程

若是你想了解如何在 Python 對你的數據進行 One-Hot 編碼,請參閱:

拓展閱讀

總結

在本文中,你應該瞭解了爲何在使用機器學習算法時一般要對類別數據進行編碼。

特別要注意:

  • 類別數據的定義是由一組有限集合中的值構成的變量。
  • 大多數機器學習算法都須要輸入數值變量,並會輸出數值變量。
  • 經過整數編碼與 One-Hot 編碼能夠將類別數據轉換爲整型數據。

還有別的問題?

請在評論中留下你的問題,我會盡力回答。

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索