- 原文地址:Why One-Hot Encode Data in Machine Learning
- 原文做者:Jason Brownlee
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:lsvih
- 校對者:TrWestdoor, portandbridge
入門機器學習應用,尤爲是須要對實際數據進行處理時,是很困難的。前端
通常來講,機器學習教程會推薦你或要求你,在開始擬合模型以前,先以特定的方式準備好數據。python
其中,一個很好的例子就是對類別數據(Categorical data)進行 One-Hot 編碼(又稱獨熱編碼)。android
在本文中,你將獲得上述重要問題的答案,並能更好地理解機器學習應用中的數據準備工做。ios
類別數據是一種只有標籤值而沒有數值的變量。git
它的值一般屬於一個大小固定且有限的集合。github
類別變量也常被稱爲標稱值(nominal)。算法
下面舉例說明:後端
以上例子中的每一個值都表明着一個不一樣的類別。bash
有些類別彼此間存在必定的天然關係,好比天然的排序關係。機器學習
上述例子中,位次(place)變量的值就有這種天然的排序關係。這種變量被稱爲序數變量(ordinal variable)。
有些算法能夠直接應用於類別數據。
好比,你能夠不進行任何數據轉換,將決策樹算法直接應用於類別數據上(取決於具體實現方式)。
但還有許多機器學習算法並不能直接操做標籤數據。這些算法要求全部的輸入輸出變量都是數值(numeric)。
一般來講,這種限制主要是由於這些機器學習算法的高效實現形成的,而不是算法自己的限制。
但這也意味着咱們須要把類別數據轉換成數值形式。若是輸出變量是類別變量,那你可能還得將模型的預測值轉換回類別形式,以便在一些應用中展現或使用它們。
這包含兩個步驟:
第一步,先要給每一個類別值都分配一個整數值。
好比,用 1 表示紅色(red),2 表示綠色(green),3 表示藍色(blue)。
這種方式被稱爲標籤編碼或者整數編碼,能夠很輕鬆地將它還原回類別值。
對於某些變量來講,這種編碼就足夠了。
整數之間存在天然的排序關係,機器學習算法也許能夠理解並利用這種關係。
好比,前面的位次(place)例子中的序數變量就是一個很好的例子。對於它咱們只須要進行標籤編碼就夠了。
但對於不存在次序關係的類別變量,僅使用上述的整數編碼是不夠的。
實際上,使用整數編碼會讓模型假設類別間存在天然的次序關係,從而致使結果不佳或獲得意外的結果(預測值落在兩個類別的中間)。
這種狀況下,就要對整數表示使用 One-Hot 編碼了。One-Hot 編碼會去除整數編碼,併爲每一個整數值都建立一個二值變量。
在顏色(color)的示例中,有 3 種類別,所以須要 3 個二值變量進行編碼。對應的顏色位置上將被標爲「1」,其它顏色位置上會被標爲「0」。
好比:
red, green, blue
1, 0, 0
0, 1, 0
0, 0, 1
複製代碼
在統計學等領域中,這種二值變量一般被稱爲「虛擬變量」或「啞變量」(dummy variable)。
若是你想了解如何在 Python 對你的數據進行 One-Hot 編碼,請參閱:
在本文中,你應該瞭解了爲何在使用機器學習算法時一般要對類別數據進行編碼。
特別要注意:
還有別的問題?
請在評論中留下你的問題,我會盡力回答。
若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。