資料預處理之獨熱編碼(One-Hot)

sereasuesue發表於2020-09-25

在機器學習演算法中,我們經常會遇到分類特徵,例如:人的性別有男女,祖國有中國,美國,法國等。
這些特徵值並不是連續的,而是離散的,無序的。通常我們需要對其進行特徵數字化。

考慮以下三個特徵:

["male", "female"]

["from Europe", "from US", "from Asia"]

["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]

如果將上述特徵用數字表示,效率會高很多。例如:

["male", "from US", "uses Internet Explorer"] 表示為[0, 1, 3]

["female", "from Asia", "uses Chrome"]表示為[1, 2, 1]

 

但是,轉化為數字表示後,上述資料不能直接用在我們的分類器中。因為,分類器往往預設資料資料是連續的,並且是有序的。但按上述表示的數字並不有序的,而是隨機分配的。

One-Hot編碼

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

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

性別特徵:["男","女"],按照N位狀態暫存器來對N個狀態進行編碼的原理,我們們處理後應該是這樣的(這裡只有兩個特徵,所以N=2):

男  =>  10

女  =>  01

使用one-hot編碼原因

使用one-hot編碼,將離散特徵的取值擴充套件到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點。

將離散特徵通過one-hot編碼對映到歐式空間,是因為,在迴歸,分類,聚類等機器學習演算法中,特徵之間距離的計算或相似度的計算是非常重要的,而我們常用的距離或相似度的計算都是在歐式空間的相似度計算,計算餘弦相似性,基於的就是歐式空間將離散型特徵使用one-hot編碼,確實會讓特徵之間的距離計算更加合理

比如,有一個離散型特徵,代表工作型別,該離散型特徵,共有三個取值,不使用one-hot編碼,其表示分別是x_1 = (1), x_2 = (2), x_3 = (3)。兩個工作之間的距離是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那麼x_1和x_3工作之間就越不相似嗎?顯然這樣的表示,計算出來的特徵的距離是不合理。那如果使用one-hot編碼,則得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那麼兩個工作之間的距離就都是sqrt(2).即每兩個工作之間的距離是一樣的,顯得更合理

  1. 解決了分類器不好處理屬性資料的問題

  2. 在一定程度上也起到了擴充特徵的作用

 參考部落格:連結:https://www.jianshu.com/p/cb344e1c860a

相關文章