離散型特徵編碼方式:one-hot與啞變量*

  在機器學習問題中,咱們經過訓練數據集學習獲得的其實就是一組模型的參數,而後經過學習獲得的參數肯定模型的表示,最後用這個模型再去進行咱們後續的預測分類等工做。在模型訓練過程當中,咱們會對訓練數據集進行抽象、抽取大量特徵,這些特徵中有離散型特徵也有連續型特徵。若此時你使用的模型是簡單模型(如LR),那麼一般咱們會對連續型特徵進行離散化操做,而後再對離散的特徵,進行one-hot編碼或啞變量編碼。這樣的操做一般會使得咱們模型具備較強的非線性能力。那麼這兩種編碼方式是如何進行的呢?它們之間是否有聯繫?又有什麼樣的區別?是如何提高模型的非線性能力的呢?下面咱們一一介紹:html

one-hot encoding

  關於one-hot編碼的具體介紹,能夠參考我以前的一篇博客,博客地址:特徵提取方法: one-hot 和 IF-IDF。這裏,再也不詳細介紹。one-hot的基本思想:將離散型特徵的每一種取值都當作一種狀態,若你的這一特徵中有N個不相同的取值,那麼咱們就能夠將該特徵抽象成N種不一樣的狀態,one-hot編碼保證了每個取值只會使得一種狀態處於「激活態」,也就是說這N種狀態中只有一個狀態位值爲1,其餘狀態位都是0。舉個例子,假設咱們以學歷爲例,咱們想要研究的類別爲小學、中學、大學、碩士、博士五種類別,咱們使用one-hot對其編碼就會獲得:機器學習

       

dummy encoding

  啞變量編碼直觀的解釋就是任意的將一個狀態位去除。仍是拿上面的例子來講,咱們用4個狀態位就足夠反應上述5個類別的信息,也就是咱們僅僅使用前四個狀態位 [0,0,0,0] 就能夠表達博士了。只是由於對於一個咱們研究的樣本,他已不是小學生、也不是中學生、也不是大學生、又不是研究生,那麼咱們就能夠默認他是博士,是否是。(額,固然他現實生活也可能上幼兒園,可是咱們統計的樣本中他並非,^-^)。因此,咱們用啞變量編碼能夠將上述5類表示成:post

      

one-hot編碼和dummy編碼:區別與聯繫

  經過上面的例子,咱們能夠看出它們的「思想路線」是相同的,只是啞變量編碼以爲one-hot編碼太羅嗦了(一些很明顯的事實還說的這麼清楚),因此它就很那麼很明顯的東西省去了。這種簡化不能說到底好很差,這要看使用的場景。下面咱們以一個例子來講明:性能

  假設咱們如今得到了一個模型,這裏自變量知足(由於特徵是one-hot得到的,全部只有一個狀態位爲1,其餘都爲了0,因此它們加和老是等於1),故咱們能夠用表示第三個特徵,將其帶入模型中,獲得:學習

     

這時,咱們就驚奇的發現這兩個參數是等價的!那麼咱們模型的穩定性就成了一個待解決的問題。這個問題這麼解決呢?有三種方法:編碼

(1)使用正則化手段,將參數的選擇上加一個限制,就是選擇參數元素值小的那個做爲最終參數,這樣咱們獲得的參數就惟一了,模型也就穩定了。url

(2)把偏置項去掉,這時咱們發現也能夠解決同一個模型參數等價的問題。spa

    

  由於有了bias項,因此和咱們去掉bias項的模型是徹底不一樣的模型,不存在參數等價的問題。3d

(3)再加上bias項的前提下,使用啞變量編碼代替one-hot編碼,這時去除了,也就不存在以前一種特徵能夠用其餘特徵表示的問題了。htm

總結:咱們使用one-hot編碼時,一般咱們的模型不加bias項 或者 加上bias項而後使用正則化手段去約束參數;當咱們使用啞變量編碼時,一般咱們的模型都會加bias項,由於不加bias項會致使固有屬性的丟失

選擇建議:我感受最好是選擇正則化 + one-hot編碼;啞變量編碼也可使用,不過最好選擇前者。雖然啞變量能夠去除one-hot編碼的冗餘信息,可是由於每一個離散型特徵各個取值的地位都是對等的,隨意取捨未免來的太隨意。

連續值的離散化爲何會提高模型的非線性能力?

   簡單的說,使用連續變量的LR模型,模型表示爲公式(1),而使用了one-hot或啞變量編碼後的模型表示爲公式(2)

     

式中表示連續型特徵,分別是離散化後在使用one-hot或啞變量編碼後的若干個特徵表示。這時咱們發現使用連續值的LR模型用一個權值去管理該特徵,而one-hot後有三個權值管理了這個特徵,這樣使得參數管理的更加精細,因此這樣拓展了LR模型的非線性能力。

  這樣作除了加強了模型的非線性能力外,還有什麼好處呢?這樣作了咱們至少不用再去對變量進行歸一化,也能夠加速參數的更新速度;再者使得一個很大權值管理一個特徵,拆分紅了許多小的權值管理這個特徵多個表示,這樣作下降了特徵值擾動對模型爲穩定性影響,也下降了異常數據對模型的影響,進而使得模型具備更好的魯棒性

相關文章
相關標籤/搜索