天天看點

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

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

為什麼使用One-Hot編碼

對于機器學習任務中,特征并不總是連續值,很多是分類值。這些分類值本身沒有大小的意義。為了将資料集中一個分類變量替換為一個或多個新特征,我們使用One-Hot編碼對資料進行預處理。

獨熱編碼(啞變量 dummy variable)是因為大部分算法是基于向量空間中的度量來進行計算的,為了使非偏序關系的變量取值不具有偏序性,并且到圓點是等距的。使用one-hot編碼,将離散特征的取值擴充到了歐式空間,離散特征的某個取值就對應歐式空間的某個點。将離散型特征使用one-hot編碼,會讓特征之間的距離計算更加合理。離散特征進行one-hot編碼後,編碼後的特征,其實每一次元的特征都可以看做是連續的特征。就可以跟對連續型特征的歸一化方法一樣,對每一維特征進行歸一化。比如歸一化到[-1,1]或歸一化到均值為0,方差為1。

​ 為什麼特征向量要映射到歐式空間?

​ 将離散特征通過one-hot編碼映射到歐式空間,是因為,在回歸,分類,聚類等機器學習算法中,特征之間距離的計算或相似度的計算是非常重要的,而我們常用的距離或相似度的計算都是在歐式空間的相似度計算,計算餘弦相似性,基于的就是歐式空間。

什麼是One-Hot編碼

獨熱編碼即 One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀态寄存器來對N個狀态進行編碼,每個狀态都由他獨立的寄存器位,并且在任意時候,其中隻有一位有效(即各種屬性之間互相排斥)。

簡而言之,即把離散的特征的每一種取值都看成一種狀态。

這樣做的好處主要有:

  1. 解決了分類器不好處理屬性資料的問題
  2. 在一定程度上也起到了擴充特征的作用

eg:

自然狀态碼為:000,001,010,011,100,101

獨熱編碼為:000001,000010,000100,001000,010000,100000
           

One-Hot編碼特征

  1. 經過獨熱編碼後,就變成了m個二進制特征。
  2. 這些特征互斥,每次隻有一個激活。
  3. 資料會變的稀疏

One-Hot編碼的優缺點

  • 優點:獨熱編碼解決了分類器不好處理屬性資料的問題,在一定程度上也起到了擴充特征的作用。它的值隻有0和1,不同的類型存儲在垂直的空間。
  • 缺點:當類别的數量很多時,特征空間會變得非常大。在這種情況下,一般可以用PCA*(principal Component Analysis,主成分分析方法)來減少次元。而且one hot encoding+*PCA這種組合在實際中也非常有用。

使用One-Hot編碼的場合

首先要明确,獨熱編碼用來解決類别型資料的離散值問題。

将離散型特征進行one-hot編碼的作用,是為了讓距離計算更合理,但如果特征是離散的,并且不用one-hot編碼就可以很合理的計算出距離,那麼就沒必要進行one-hot編碼。 有些基于樹的算法在處理變量時,并不是基于向量空間度量,數值隻是個類别符号,即沒有偏序關系,是以不用進行獨熱編碼。 Tree Model不太需要one-hot編碼: 對于決策樹來說,one-hot的本質是增加樹的深度。

One-Hot 和 啞變量(虛拟變量)

首先One-Hot編碼主要解決資料的向量化 表示,而虛拟變量則是一個統計學概念。

對于啞變量餘獨熱編碼的相異點,最直覺的了解就是啞變量将任意一個One-Hot編碼狀态去除。即啞變量将定性特征轉化為n-1個特征,而One-hot則是轉化為n個特征。意思就是啞變量在編碼時會去除第一個狀态,而One-hot則對所有的狀态都會進行編碼。

這樣可以使One-Hot編碼減少一個備援位,這種去除是随機的。但是對于一個沒有權重的資料集而言随機取出有點過于随意。