分類問題中 one-hot向量格式

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
     

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章