| 特征處理(Feature Processing)Nov 15, 2014 特征工程(Feature Engineering)經(jīng)常被說為機(jī)器學(xué)習(xí)中的black art,這里面包含了很多不可言說的方面。怎么處理好特征,最重要的當(dāng)然還是對要解決問題的了解。但是,它其實(shí)也有很多科學(xué)的地方。這篇文章我之所以命名為特征處理(Feature Processing),是因?yàn)檫@里面要介紹的東西只是特征工程中的一小部分。這部分比較基礎(chǔ),比較容易說,所以由此開始。 單個原始特征(或稱為變量)通常屬于以下幾類之一: 
 本文中我主要介紹針對單個特征的處理方法,雖然也會附帶介紹基礎(chǔ)的特征組合方法。同時處理多個特征,以及更復(fù)雜的特征處理方法介紹,以后我再另外細(xì)說。下面我由淺入深地逐漸說明針對這三類特征的常用處理方法。 初級篇這節(jié)要講的處理技術(shù),應(yīng)該剛接觸機(jī)器學(xué)習(xí)不久的同學(xué)都會知道。 連續(xù)特征除了歸一化(去中心,方差歸一),不用做太多特殊處理,可以直接把連續(xù)特征扔到模型里使用。 無序特征
可以使用One-hot(也叫One-of-k)的方法把每個無序特征轉(zhuǎn)化為一個數(shù)值向量。比如一個無序特征 
 這種方法在NLP里用的很多,就是所謂的詞向量模型。變換后的向量長度對于詞典長度,每個詞對應(yīng)于向量中的一個元素。 
機(jī)器學(xué)習(xí)書籍里在講這個的時候介紹的處理方法可能跟我上面說的有點(diǎn)差別。上面說的表達(dá)方式里有一個維度是可以省略的。既然我們知道 
 這樣表達(dá)的好處是少用了一個維度,降低了轉(zhuǎn)化后特征之間的相關(guān)性。但在實(shí)際問題中特征基本都或多或少會有些缺失。使用第一種表達(dá)方式就可以用全0的向量來表示值缺失,而第二種表達(dá)方式是沒法表達(dá)缺失的。 有序特征
有些特征雖然也像無序特征那樣只取限定的幾個值,但是這些值之間有順序的含義。例如一個人的狀態(tài) 當(dāng)然,對有序特征最簡單的處理方式是忽略其中的順序關(guān)系,把它看成無序的,這樣我們就可以使用處理無序特征的方式來處理它。在實(shí)際問題中,這種處理方式其實(shí)用的很多。 當(dāng)然有些問題里有序可能會很重要,這時候就不應(yīng)該把其中的順序關(guān)系丟掉。一般的表達(dá)方式如下: 
 上面這種表達(dá)方式很巧妙地利用遞進(jìn)表達(dá)了值之間的順序關(guān)系。 中級篇最容易讓人掉以輕心的,往往就是大家覺得最簡單的事。在特征處理中,最容易讓剛?cè)腴T同學(xué)忽略的,是對連續(xù)特征的處理方式。 以線性分類器Linear Regression (LinearReg)為例,它是通過特征的線性加權(quán)來預(yù)測因變量: 但大部分實(shí)際情況下,與都不會是這么簡單的線性關(guān)系,甚至連單調(diào)關(guān)系都不會有。舉個只有一個特征的例子,如果與的實(shí)際關(guān)系如下圖: 
 那么直接把扔進(jìn)LinearReg模型是怎么也得不到好結(jié)果的。很多人會想著既然線性分類器搞不定,那就直接找個非線性的好了,比如高斯核的SVM。我們確實(shí)可以通過這種簡單換算法的方式解決這個簡單的問題。但對于很多實(shí)際問題(如廣告點(diǎn)擊率預(yù)測),往往特征非常多,這時候時間約束通常不允許我們使用很復(fù)雜的非線性分類器。這也是為什么算法發(fā)展這么多年,廣告點(diǎn)擊率預(yù)測最常用的方法還是Logistic Regression (LogisticReg)。 對于上面這個問題,有沒有什么辦法使得LinearReg也能處理得不錯?當(dāng)然是有,就是對原始特征做轉(zhuǎn)化,把原來的非線性關(guān)系轉(zhuǎn)化為線性關(guān)系。 方法一:離散化最常用的轉(zhuǎn)化方式是對做離散化(discretization),也就是把原來的值分段,轉(zhuǎn)化成一個取值為0或1的向量。原始值落在某個段里,向量中此段對應(yīng)的元素就為1,否則為0。 
 比如取離散點(diǎn),通過判斷屬于,,,中哪段來把它離散化為4維的向量。下面是一些例子的離散結(jié)果: 
 離散化方法的關(guān)鍵是怎么確定分段中的離散點(diǎn)。下面是常用的選取離散點(diǎn)的方法: 
 
 
 
 
 
 上面介紹的這種離散化為0/1向量的方法有個問題,它在離散時不會考慮到具體的到離散邊界的距離。比如等距離散中取離散點(diǎn)為,那么1.499,1.501和2.49分別會離散為(0, 1, 0, 0),(0, 0, 1, 0)和(0, 0, 1, 0)。1.499和1.501很接近,可是就因?yàn)檫@種強(qiáng)制分段的離散導(dǎo)致它們離散的結(jié)果差距很大。 針對上面這種硬離散的一種改進(jìn)就是使用軟離散,也就是在離散時考慮到與附近離散點(diǎn)的距離,離散出來的向量元素值可以是0/1之外的其他值。有興趣的同學(xué)可以去ESL1這本書中找點(diǎn)感覺。 方法二:函數(shù)變換函數(shù)變換直接把原來的特征通過非線性函數(shù)做變換,然后把原來的特征,以及變換后的特征一起加入模型進(jìn)行訓(xùn)練。常用的變換函數(shù)見下表,不過其實(shí)你可以嘗試任何函數(shù)。 
 這個方法操作起來很簡單,但記得對新加入的特征做歸一化。 對于我們前面的問題,只要把,也作為特征加入即可,因?yàn)閷?shí)際上就是的一個三次多項(xiàng)式。 高級篇笛卡爾乘積
我們可以使用笛卡爾乘積的方式來組合2個或更多個特征。比如有兩個類別特征 
 對于3個特征的笛卡爾乘積組合,可以表達(dá)為立方的形式。更多特征的組合依次類推。 這個方法也可以直接用于連續(xù)特征與類別特征之間的組合,只要把連續(xù)特征看成是1維的類別特征就好了,這時候組合后特征對應(yīng)的值就不是0/1了,而是連續(xù)特征的取值。 離散化續(xù)篇在上節(jié)中我已經(jīng)介紹了一些常用的離散化單個連續(xù)特征的方法,其中一個是畫圖觀察趨勢。畫圖觀察趨勢的好處是直觀、可解釋性強(qiáng),壞處是很麻煩。當(dāng)要離散化的特征很多時,這種方法可操作性較差。 
機(jī)器學(xué)習(xí)中有個很好解釋,速度也不錯的模型——決策樹模型。大白話說決策樹模型就是一大堆的 決策樹離散化方法通常也是每次離散化一個連續(xù)特征,做法如下: 
 這種方法當(dāng)然也可以同時離散化多個連續(xù)特征,但是操作起來就更復(fù)雜了,實(shí)際用的不多。 核方法核方法經(jīng)常作為線性模型的一種推廣出現(xiàn)。以線性回歸模型為例,它對應(yīng)的核方法如下: 其中$\{x_i\}^n_{i=1}$為訓(xùn)練樣本點(diǎn),$K(x_i, x_j)$為核函數(shù),比如常用的高斯核函數(shù)為: 
 當(dāng)然,如果把核函數(shù)$K(x_i, x_j)$看成一種相似度的話,那上面的模型就是kNN模型了,或者叫做加權(quán)平均模型也可以。 因?yàn)楹朔椒ㄔ陬A(yù)測時也要用到訓(xùn)練樣本點(diǎn),耗內(nèi)存且計算量大,所以在數(shù)據(jù)量較大的實(shí)際問題中用的并不多。 到此,我已經(jīng)介紹了不少針對單個特征的處理方法。這些處理方法很難說哪個好哪個不好。有些問題這個好,有些問題那個好,也沒什么絕招能直接判斷出哪種方法能適合哪些問題。唯一的招就是: 
 References
 | 
|  |