one-hot向量
one-hot向量將類別變量轉換爲機器學習算法易於利用的一種形式的過程,這個向量的表示爲一項屬性的特徵向量,也就是同一時間只有一個激活點(不爲0),這個向量只有一個特徵是不爲0的,其他都是0,特別稀疏。
舉個例子:一個特徵“性別”,性別有“男性”、“女性”,這個特徵有兩個特徵值,也只有兩個特徵值,如果這個特徵進行one-hot編碼,則特徵值爲“男性”的編碼爲“10”,“女性”的編碼爲“01”,如果特徵值有m個離散特徵值,則one-hot後特徵值的表示是一個m維的向量,每個樣本的特徵只能有一個值,這個值的向量座標上就是1,其他都是0,如果有多個特徵,“性別”有兩個特徵,“尺碼”:M、L、XL三個值,我們用“01”表示男性,M爲“100”,L爲“010”,XL爲“001”,所以一個樣本,【“男性”、“L”】 one-hot編碼爲[10 010],一個樣本也就是5維的向量,這就是one-hot形式。
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).即每兩個工作之間的距離是一樣的,顯得更合理。
缺點:
如果原本的標籤編碼是有序的,那one hot編碼就不合適了——會丟失順序信息。
如果特徵的特徵值數目特別多,特徵向量就會非常大,且非常稀疏。
舉例:
在分類問題中,經常使用的損失函數 交叉熵(categorical_crossentropy),如果你不使用 onehot格式,而是使用數字來代替,那麼類別之間的數據就不好判斷了,就需要使用 (sparse_categorical_crossentropy)來表示
categorical_crossentropy VS sparse_categorical_crossentropy
If the targets are one-hot encoded, use categorical_crossentropy
Examoles of one-hot encodings:
- [1, 0, 0]
- [0, 1, 0]
- [0, 0, 1]
If the targets are integers, use sparse_categorical_crossentropy
Examples of integer encodings
- 1
- 2
- 3