分類變數是另一類常見的變數,用於表示類別或標記。與數值變數不同的是,分類變數的值是不能被排序的,所以也稱無序變數。

分類變數有大小型之分,小型分類變數如性別、學歷;大型分類變數如用戶ID、IP地址、單詞。

分類變數處理的核心是如何編碼類別。最簡單的方式就是使用正整數編碼類別,但是這樣就使得類別之間有了順序,相當於是引入了額外的特徵信息,是不允許的。

小型分類變數一般是每個類別都進行編碼,而大型分類變數的編碼過程包含了特徵壓縮。

小型特徵的處理技術

一.one-hot編碼

one-hot編碼(獨熱編碼)用一個比特位表示一種可能的編碼。一般每個變數只屬於一個類別,所以只有一個比特位是1,這就是『獨熱『』這個詞的由來。

使用獨熱編碼後,一個有k個類別的分類變數就被編碼為一個長度為k的特徵向量。相當於一個有k個取值的分類特徵轉換為了k個二值特徵。

獨熱編碼的問題是,使用的比特位比實際所需多一位,因為所有位都為0這個編碼沒有被使用。

因為有且只有一個比特位是1,各比特位bn表示,則有b1+b2+...+bn=1。這是一個線性關係,而線性相關的特徵有個缺點,會導致訓練出的模型不唯一,特徵的不同線性組合可以做出相同的預測。

獨熱編碼

二.dummy編碼

獨熱編碼的問題可以表述為編碼比特位的自由度為k+1,而變數本身的自由度為k。dummy編碼(虛擬編碼)在表示特徵時,除去了額外的自由度,用全零向量表示了一個特徵。全零向量表示的特徵是參照類。相當於一個有k個取值的分類特徵轉換為了k-1個二值特徵。

虛擬編碼沒有了冗餘,但是也損失了獨熱編碼具有的直觀性。直觀和冗餘有時候是矛盾。

書中用一個線性回歸的例子說明瞭獨熱編碼和虛擬編碼帶來的模型的區別。獨熱編碼和虛擬編碼得到的線性回歸模型,係數和截距的意義都不同。獨熱編碼的截距是一個均值,係數是與均值的差距;虛擬編碼的截距是參照類的值,係數表示與參照類的差距。

我感覺書上舉得例子都不太好,可能是為了舉例而舉例,就不細說了,知道大概意思即可。

三.effect編碼

effect編碼(效果編碼)與虛擬編碼非常相似,區別在於參照類由全-1組成的向量表示。相當於一個有k個取值的分類特徵轉換為了k-1個二值特徵。

效果編碼得到模型的截距是一個均值,係數與均值的差距(這種差距也稱為類別的效果),這一點與獨熱編碼相同。

但是效果編碼中沒有單獨特徵(編碼後的比特位)表示參照類。參照類的效果不能直接看出來,要經過計算,等於所有其他類別係數相反數之和。

相等的根本原因是所有特徵與均值的距離之和應該是0,所以知道均值和其他特徵的距離,當然就能計算餘下特徵的距離。這也正好驗證了獨熱編碼有冗餘。

效果編碼的缺點是全-1的向量是密集向量,計算和存儲成本較高。虛擬編碼在實際中使用相對較少。

大型特徵的處理技術

一.特徵散列

特徵散列比較好理解,就是是用散列(哈希)函數處理特徵,將特徵(可能是用無界的整數表示)映射到一個有限的整數範圍[1,m]中。

因為輸入域一般大於輸出域,所以可能會有多個值映射到同一輸出,也稱碰撞。

任何可以表示為數值的對象,如字元串、複雜結構等,都可以使用該方法。特徵散列是初始特徵的某種聚合,對提升計算速度有很大幫助,但是喪失了初始特徵的可解釋性。

二.分箱計數

分箱計數是將特徵重新編碼,使用目標變數一個統計量作為編碼。特徵散列是編碼特徵取值,而分箱計數不是直接編碼特徵取值。

書中舉的例子是,在預測廣告點擊量時,使用用戶點擊某廣告的概率作為用戶的編碼,也可以直接使用用戶點擊某廣告的次數,這也是『計數』二字的由來。

如果大型特徵用獨熱編碼表示,將會是一個很大的係數矩陣,而用分箱計數,則轉換為一個小巧、密集的實數。

對於稀有類,可以使用合併的方法處理,稱為back-off。即如果計數大於閾值,則使用自己的計數統計量;小於閾值,則使用back-off分箱的統計量,也體現了『分箱』二字。

還可以使用計數圖處理稀有類,就是使用多個散列函數(h)映射統計量(I)(這些函數有相同的輸出範圍),用取值最小的映射值(c)作為編碼。同單個散列函數比,這降低了碰撞概率。

計數圖的映射過程

分箱計數時,因為用到統計量,所以需要等待一段時間完成數據收集和統計,並且在數據變化較快時,需要頻繁更新編碼。

分箱計數的另一個缺陷是可能造成數據泄露,即在特徵中包含了要預測的目標變數的信息。所以一定要做好訓練集、測試集等數據集的隔離。

如果計數增加非常快時,頻繁維護模型會造成一些問題,可以使用歸一化的計數或取對數來保證計數值落在一個確定區間。應付頻繁變化的另一個方法是使用在線學習模式。

微信公眾號:曲曲菜

知乎專欄:AI和金融模型

原創作品,未標明作者不得轉載。

推薦閱讀:

相關文章