在機器學習中,我們很多的特徵並不是連續值,而是分類值,這個時候我們我們將這些特徵用數字來表示,效率可能就會高很多,但是如果我們任意的編碼,這樣的特徵處理並不能直接放入機器學習演算法中,比如我們有一個性別的特徵是:性別:['male','female','other'],我們不能隨意地編碼成0,1,2,而必須要進行one-hot編碼,比如這個時候性別的特徵是三維的,那麼male就是[1,0,0],female就是[0,1,0],而other則是[0,0,1]。
為什麼要進行獨熱編碼
為什麼要將特徵向量對映到歐式空間
將離散特徵通過one-hot編碼隱射到歐式空間,是因為,在迴歸、分類、聚類等機器學習演算法中,特徵之間距離的計算或相似度的計算是非常重要的,而我們常用的距離或者相似度的計算都是在歐式空間的相似度計算,計算餘弦相似度,基於的就是歐氏空間。
獨熱編碼的優缺點
優點:獨熱編碼解決了分類器不好處理屬性資料的問題,在一定程度上也起到了擴充特徵的作用,它的值只有0和1,不同的型別儲存在垂直的空間。
缺點:當類別的數量很多時,特徵空間將會變得很大(同時資料也會變得非常稀疏)。在這種情況下,一般可以使用PCA來減少維度,實際上one-hot+PCA的組合在實際中也非常有用。
什麼情況下使用或者不使用獨熱編碼
用的時候是用於解決類別型資料的離散值問題,而對於不用的時候:將離散型特徵進行one-hot編碼的作用是為了讓距離計算更加的合理,但是如果特徵是離散的,並且不用one-hot編碼就可以很合理地計算出距離,那麼就沒必要進行one-hot編碼,有些基於樹的演算法在處理變數時,並不是基於向量空間度量,數值只是個類別符號,即沒有偏序關係,所以不用進行獨熱編碼,樹形模型不太需要獨熱編碼,對於決策樹來說,one-hot的本質是增加樹的深度,另外如果當前特徵類別不太多的時候更加建議考慮。