one-hot編碼

xdmonkey發表於2018-04-10

  在機器學習中,我們很多的特徵並不是連續值,而是分類值,這個時候我們我們將這些特徵用數字來表示,效率可能就會高很多,但是如果我們任意的編碼,這樣的特徵處理並不能直接放入機器學習演算法中,比如我們有一個性別的特徵是:性別:['male','female','other'],我們不能隨意地編碼成0,1,2,而必須要進行one-hot編碼,比如這個時候性別的特徵是三維的,那麼male就是[1,0,0],female就是[0,1,0],而other則是[0,0,1]。

  為什麼要進行獨熱編碼

  因為在機器學習中的大部分演算法都是基於向量空間中的度量來計算的,為了使得非偏序關係的變數取值不具有偏序性,並且到原點是等距的。使用one-hot編碼,將離散特徵的取值擴充到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點,將離散型特徵使用one-hot編碼會讓特徵之間的距離計算更加的合理。離散特徵在進行one-hot編碼後,編碼後的特徵其實每個維度的特徵都可以看做是連續的特徵,就可以跟對連續型特徵的歸一化方法一樣,對每一維特徵進行歸一化。比如歸一化到[-1,1]或歸一化到均值為0,方差為1。

  為什麼要將特徵向量對映到歐式空間

  將離散特徵通過one-hot編碼隱射到歐式空間,是因為,在迴歸、分類、聚類等機器學習演算法中,特徵之間距離的計算或相似度的計算是非常重要的,而我們常用的距離或者相似度的計算都是在歐式空間的相似度計算,計算餘弦相似度,基於的就是歐氏空間。

  獨熱編碼的優缺點

  優點:獨熱編碼解決了分類器不好處理屬性資料的問題,在一定程度上也起到了擴充特徵的作用,它的值只有0和1,不同的型別儲存在垂直的空間。

  缺點:當類別的數量很多時,特徵空間將會變得很大(同時資料也會變得非常稀疏)。在這種情況下,一般可以使用PCA來減少維度,實際上one-hot+PCA的組合在實際中也非常有用。

  什麼情況下使用或者不使用獨熱編碼

  用的時候是用於解決類別型資料的離散值問題,而對於不用的時候:將離散型特徵進行one-hot編碼的作用是為了讓距離計算更加的合理,但是如果特徵是離散的,並且不用one-hot編碼就可以很合理地計算出距離,那麼就沒必要進行one-hot編碼,有些基於樹的演算法在處理變數時,並不是基於向量空間度量,數值只是個類別符號,即沒有偏序關係,所以不用進行獨熱編碼,樹形模型不太需要獨熱編碼,對於決策樹來說,one-hot的本質是增加樹的深度,另外如果當前特徵類別不太多的時候更加建議考慮。


相關文章