參考:
https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/6874046.html (種類變量問題)
https://www.cnblogs.com/lianyingteng/p/7792693.html(one-hot,dummy variable,及其問題)
- 種類變量:
solve with category:
Many learning algorithms either learn a single weight per feature, or they use distances between samples. The former is the case for linear models such as logistic regression, which are easy to explain.,(此處用回歸分類進(jìn)行解釋)Suppose you have a dataset having only a single categorical feature "nationality", with values "UK", "French" and "US". Assume, without loss of generality, that these are encoded as 0, 1 and 2. You then have a weight w for this feature in a linear classifier, which will make some kind of decision based on the constraint w×x + b > 0, or equivalently w×x < b.
problem:
The problem now is that the weight w cannot encode a three-way choice. The three possible values of w×x are 0, w and 2×w. Either these three all lead to the same decision (they're all < b or ≥b) or "UK" and "French" lead to the same decision, or "French" and "US" give the same decision. There's no possibility for the model to learn that "UK" and "US" should be given the same label, with "French" the odd one out.(即種類變量颤陶,不能將兩端的值區(qū)別于中間的值歸于一類)- dummy variable:
啞變量編碼直觀的解釋就是任意的將一個狀態(tài)位去除俐银。還是拿上面的例子來說,我們用4個狀態(tài)位就足夠反應(yīng)上述5個類別的信息,也就是我們僅僅使用前四個狀態(tài)位 [0,0,0,0] 就可以表達(dá)博士了。只是因為對于一個我們研究的樣本碉钠,他已不是小學(xué)生、也不是中學(xué)生、也不是大學(xué)生奄抽、又不是研究生,那么我們就可以默認(rèn)他是博士甩鳄,是不是逞度。(額,當(dāng)然他現(xiàn)實生活也可能上幼兒園妙啃,但是我們統(tǒng)計的樣本中他并不是档泽,-)。所以揖赴,我們用啞變量編碼可以將上述5類表示成:image.png- one-hot:
關(guān)于one-hot編碼的具體介紹馆匿,可以參考我之前的一篇博客,博客地址:特征提取方法: one-hot 和 IF-IDF燥滑。這里渐北,不再詳細(xì)介紹。one-hot的基本思想:將離散型特征的每一種取值都看成一種狀態(tài)铭拧,若你的這一特征中有N個不相同的取值腔稀,那么我們就可以將該特征抽象成N種不同的狀態(tài)盆昙,one-hot編碼保證了每一個取值只會使得一種狀態(tài)處于“激活態(tài)”,也就是說這N種狀態(tài)中只有一個狀態(tài)位值為1焊虏,其他狀態(tài)位都是0淡喜。舉個例子,假設(shè)我們以學(xué)歷為例诵闭,我們想要研究的類別為小學(xué)炼团、中學(xué)、大學(xué)疏尿、碩士瘟芝、博士五種類別,我們使用one-hot對其編碼就會得到:
image.pngone-hot與dummy的區(qū)別及注意點:
假設(shè)我們現(xiàn)在獲得了一個模型
通過上面的例子褥琐,我們可以看出它們的“思想路線”是相同的锌俱,只是啞變量編碼覺得one-hot編碼太羅嗦了(一些很明顯的事實還說的這么清楚),所以它就很那么很明顯的東西省去了敌呈。這種簡化不能說到底好不好贸宏,這要看使用的場景。下面我們以一個例子來說明:
磕洪,這里自變量滿足image(因為特征是one-hot獲得的吭练,所有只有一個狀態(tài)位為1,其他都為了0析显,所以它們加和總是等于1)鲫咽,故我們可以用image表示第三個特征,將其帶入模型中谷异,得到:image這時分尸,我們就驚奇的發(fā)現(xiàn)image和image這兩個參數(shù)是等價的!那么我們模型的穩(wěn)定性就成了一個待解決的問題歹嘹。這個問題這么解決呢寓落?有三種方法:image
(1)使用正則化手段,將參數(shù)的選擇上加一個限制荞下,就是選擇參數(shù)元素值小的那個作為最終參數(shù)伶选,這樣我們得到的參數(shù)就唯一了,模型也就穩(wěn)定了尖昏。image
(2)把偏置項去掉仰税,這時我們發(fā)現(xiàn)也可以解決同一個模型參數(shù)等價的問題。image因為有了bias項抽诉,所以和我們?nèi)サ鬮ias項的模型是完全不同的模型陨簇,不存在參數(shù)等價的問題。image
(3)再加上bias項的前提下迹淌,使用啞變量編碼代替one-hot編碼河绽,這時去除了己单,也就不存在之前一種特征可以用其他特征表示的問題了。image- 使用總結(jié):
總結(jié):我們使用one-hot編碼時耙饰,通常我們的模型不加bias項 或者 加上bias項然后使用正則化手段去約束參數(shù)纹笼;當(dāng)我們使用啞變量編碼時,通常我們的模型都會加bias項苟跪,因為不加bias項會導(dǎo)致固有屬性的丟失廷痘。image
選擇建議:我感覺最好是選擇正則化 + one-hot編碼;啞變量編碼也可以使用件已,不過最好選擇前者笋额。雖然啞變量可以去除one-hot編碼的冗余信息,但是因為每個離散型特征各個取值的地位都是對等的篷扩,隨意取舍未免來的太隨意兄猩。
對于連續(xù)性變量的處理:
簡單的說,使用連續(xù)變量的LR模型鉴未,模型表示為公式(1)枢冤,而使用了one-hot或啞變量編碼后的模型表示為公式(2)式中image表示連續(xù)型特征,image歼狼、image掏导、image分別是離散化后在使用one-hot或啞變量編碼后的若干個特征表示享怀。這時我們發(fā)現(xiàn)使用連續(xù)值的LR模型用一個權(quán)值去管理該特征羽峰,而one-hot后有三個權(quán)值管理了這個特征,這樣使得參數(shù)管理的更加精細(xì)添瓷,所以這樣拓展了LR模型的非線性能力梅屉。image
這樣做除了增強(qiáng)了模型的非線性能力外,還有什么好處呢鳞贷?這樣做了我們至少不用再去對變量進(jìn)行歸一化坯汤,也可以加速參數(shù)的更新速度;再者使得一個很大權(quán)值管理一個特征搀愧,拆分成了許多小的權(quán)值管理這個特征多個表示惰聂,這樣做降低了特征值擾動對模型為穩(wěn)定性影響,也降低了異常數(shù)據(jù)對模型的影響咱筛,進(jìn)而使得模型具有更好的魯棒性搓幌。