七種常用的特征工程
像一個(gè)優(yōu)秀的工程師一樣使用機(jī)器學(xué)習(xí),而不要像一個(gè)機(jī)器學(xué)習(xí)專家一樣使用機(jī)器學(xué)習(xí)方法。---google
當(dāng)在做數(shù)據(jù)挖掘和數(shù)據(jù)分析時(shí),數(shù)據(jù)是所有問題的基礎(chǔ),并且會(huì)影響整個(gè)工程的流程。相比一些復(fù)雜的算法,如何靈活的處理好數(shù)據(jù)經(jīng)常會(huì)取到意想不到的效益。而處理數(shù)據(jù)不可或缺的需要使用到特征工程。
1.什么是特征工程
簡單的說,特征工程是能夠?qū)?shù)據(jù)像藝術(shù)一樣展現(xiàn)的技術(shù)。為什么這么說呢?因?yàn)楹玫奶卣鞴こ毯芎玫幕旌狭藢I(yè)領(lǐng)域知識(shí)、直覺和基本的數(shù)學(xué)能力。但是最有效的數(shù)據(jù)呈現(xiàn)其實(shí)并不涉及任何的數(shù)據(jù)運(yùn)算。
本質(zhì)上來說,呈現(xiàn)給算法的數(shù)據(jù)應(yīng)該能擁有基本數(shù)據(jù)的相關(guān)結(jié)構(gòu)或?qū)傩浴.?dāng)你做特征工程時(shí),其實(shí)是將數(shù)據(jù)屬性轉(zhuǎn)換為數(shù)據(jù)特征的過程,屬性代表了數(shù)據(jù)的所有維度,在數(shù)據(jù)建模時(shí),如果對(duì)原始數(shù)據(jù)的所有屬性進(jìn)行學(xué)習(xí),并不能很好的找到數(shù)據(jù)的潛在趨勢(shì),而通過特征工程對(duì)你的數(shù)據(jù)進(jìn)行預(yù)處理的話,你的算法模型能夠減少受到噪聲的干擾,這樣能夠更好的找出趨勢(shì)。事實(shí)上,好的特征甚至能夠幫你實(shí)現(xiàn)使用簡單的模型達(dá)到很好的效果。

但是對(duì)于特征工程中引用的新特征,需要驗(yàn)證它確實(shí)提高的預(yù)測(cè)的準(zhǔn)確度,而不是加入了一個(gè)無用的特征,不然只會(huì)增加算法運(yùn)算的復(fù)雜度。
本文只提供一些簡單的特征工程技巧,希望能夠在你以后的分析中提供幫忙。
2.常用特征工程
2.1 時(shí)間戳處理
時(shí)間戳屬性通常需要分離成多個(gè)維度比如年、月、日、小時(shí)、分鐘、秒鐘。但是在很多的應(yīng)用中,大量的信息是不需要的。比如在一個(gè)監(jiān)督系統(tǒng)中,嘗試?yán)靡粋€(gè)’位置+時(shí)間‘的函數(shù)預(yù)測(cè)一個(gè)城市的交通故障程度,這個(gè)實(shí)例中,大部分會(huì)受到誤導(dǎo)只通過不同的秒數(shù)去學(xué)習(xí)趨勢(shì),其實(shí)是不合理的。并且維度'年'也不能很好的給模型增加值的變化,我們可能僅僅需要小時(shí)、日、月等維度。因此當(dāng)我們?cè)诔尸F(xiàn)時(shí)間的時(shí)候,試著保證你所提供的所有數(shù)據(jù)是你的模型所需要的。
并且別忘了時(shí)區(qū),假如你的數(shù)據(jù)源來自不同的地理數(shù)據(jù)源,別忘了利用時(shí)區(qū)將數(shù)據(jù)標(biāo)準(zhǔn)化。
2.2 分解類別屬性
一些屬性是類別型而不是數(shù)值型,舉一個(gè)簡單的例子,由{紅,綠、藍(lán)}組成的顏色屬性,最常用的方式是把每個(gè)類別屬性轉(zhuǎn)換成二元屬性,即從{0,1}取一個(gè)值。因此基本上增加的屬性等于相應(yīng)數(shù)目的類別,并且對(duì)于你數(shù)據(jù)集中的每個(gè)實(shí)例,只有一個(gè)是1(其他的為0),這也就是獨(dú)熱(one-hot)編碼方式(類似于轉(zhuǎn)換成啞變量)。
如果你不了解這個(gè)編碼的話,你可能會(huì)覺得分解會(huì)增加沒必要的麻煩(因?yàn)榫幋a大量的增加了數(shù)據(jù)集的維度)。相反,你可能會(huì)嘗試將類別屬性轉(zhuǎn)換成一個(gè)標(biāo)量值,例如顏色屬性可能會(huì)用{1,2,3}表示{紅,綠,藍(lán)}。這里存在兩個(gè)問題,首先,對(duì)于一個(gè)數(shù)學(xué)模型,這意味著某種意義上紅色和綠色比和藍(lán)色更“相似”(因?yàn)?code style="font-size: 14px;margin-right: 2px;margin-left: 2px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(53, 148, 247);background: rgba(59, 170, 250, 0.1);padding-right: 2px;padding-left: 2px;border-radius: 2px;height: 21px;line-height: 22px;">|1-3| > |1-2|)。除非你的類別擁有排序的屬性(比如鐵路線上的站),這樣可能會(huì)誤導(dǎo)你的模型。然后,可能會(huì)導(dǎo)致統(tǒng)計(jì)指標(biāo)(比如均值)無意義,更糟糕的情況是,會(huì)誤導(dǎo)你的模型。還是顏色的例子,假如你的數(shù)據(jù)集包含相同數(shù)量的紅色和藍(lán)色的實(shí)例,但是沒有綠色的,那么顏色的均值可能還是得到2,也就是綠色的意思。
能夠?qū)㈩悇e屬性轉(zhuǎn)換成一個(gè)標(biāo)量,最有效的場景應(yīng)該就是只有兩個(gè)類別的情況。即{0,1}對(duì)應(yīng){類別1,類別2}。這種情況下,并不需要排序,并且你可以將屬性的值理解成屬于類別1或類別2的概率。
2.3 分箱/分區(qū)
有時(shí)候,將數(shù)值型屬性轉(zhuǎn)換成類別呈現(xiàn)更有意義,同時(shí)能使算法減少噪聲的干擾,通過將一定范圍內(nèi)的數(shù)值劃分成確定的塊。舉個(gè)例子,我們預(yù)測(cè)一個(gè)人是否擁有某款衣服,這里年齡是一個(gè)確切的因子。其實(shí)年齡組是更為相關(guān)的因子,所有我們可以將年齡分布劃分成1-10,11-18,19-25,26-40等。而且,不是將這些類別分解成2個(gè)點(diǎn),你可以使用標(biāo)量值,因?yàn)橄嘟哪挲g組表現(xiàn)出相似的屬性。
只有在了解屬性的領(lǐng)域知識(shí)的基礎(chǔ),確定屬性能夠劃分成簡潔的范圍時(shí)分區(qū)才有意義。即所有的數(shù)值落入一個(gè)分區(qū)時(shí)能夠呈現(xiàn)出共同的特征。在實(shí)際應(yīng)用中,當(dāng)你不想讓你的模型總是嘗試區(qū)分值之間是否太近時(shí),分區(qū)能夠避免出現(xiàn)過擬合。例如,如果你所感興趣的是將一個(gè)城市作為整體,這時(shí)你可以將所有落入該城市的維度值進(jìn)行整合成一個(gè)整體。分箱也能減小小錯(cuò)誤的影響,通過將一個(gè)給定值劃入到最近的塊中。如果劃分范圍的數(shù)量和所有可能值相近,或?qū)δ銇碚f準(zhǔn)確率很重要的話,此時(shí)分箱就不適合了。
2.4 交叉特征
交叉特征算是特征工程中非常重要的方法之一了,交叉特征是一種很獨(dú)特的方式,它將兩個(gè)或更多的類別屬性組合成一個(gè)。當(dāng)組合的特征要比單個(gè)特征更好時(shí),這是一項(xiàng)非常有用的技術(shù)。數(shù)學(xué)上來說,是對(duì)類別特征的所有可能值進(jìn)行交叉相乘。
假如擁有一個(gè)特征A,A有兩個(gè)可能值{A1,A2}。擁有一個(gè)特征B,存在{B1,B2}等可能值。然后,A&B之間的交叉特征如下:{(A1,B1),(A1,B2),(A2,B1),(A2,B2)},并且你可以給這些組合特征取任何名字。但是需要明白每個(gè)組合特征其實(shí)代表著A和B各自信息協(xié)同作用。
舉個(gè)栗子,如下圖中:

所有的藍(lán)色點(diǎn)屬于一類,紅色屬于另外一類。我們不考慮實(shí)際模型,首先,將X,Y值分成{x < 0, x >= 0} & {y < 0, y >= 0}對(duì)我們來說會(huì)很有用,將劃分結(jié)果取名為和。很顯然I&III象限對(duì)應(yīng)于紅色類別,II&IV象限是藍(lán)色類。因此如果現(xiàn)在將特征X和特征Y組成成交叉特征,你會(huì)有四個(gè)象限特征,{I,II,III,IV}分別對(duì)應(yīng)于。
一個(gè)更好地詮釋好的交叉特征的實(shí)例是類似于(經(jīng)度,緯度)。一個(gè)相同的經(jīng)度對(duì)應(yīng)了地圖上很多的地方,緯度也是一樣。但是一旦你將經(jīng)度和緯度組合到一起,它們就代表了地理上特定的一塊區(qū)域,區(qū)域中每一部分是擁有著類似的特性。
有時(shí)候,能夠通過簡單的數(shù)學(xué)技巧將數(shù)據(jù)的屬性組合成一個(gè)單一的特征。在上一個(gè)例子中,將更改的特征設(shè)定為和,并且有如下關(guān)系:
將新的特征定義為,有:
我們可以根據(jù)確定特征,如果為,類別是紅色,如果是為其他值,則是藍(lán)色;
2.5 特征選擇
為了得到更好的模型,使用某些算法自動(dòng)的選出原始特征的子集。這個(gè)過程,你不會(huì)構(gòu)建或修改你擁有的特征,但是會(huì)通過修剪特征來達(dá)到減少噪聲和冗余。
那些和我們解決的問題無關(guān)需要被移除的屬性,在我們的數(shù)據(jù)特征中存在了一些特征對(duì)于提高模型的準(zhǔn)確率比其他更重要的特征,也還有一些特征與其他特征放在一起出現(xiàn)了冗余,特征選擇是通過自動(dòng)選出對(duì)于解決問題最有用的特征子集來解決上述問題的。
特征選擇算法可能會(huì)用到評(píng)分方法來排名和選擇特征,比如相關(guān)性或其他確定特征重要性的方法,更進(jìn)一步的方法可能需要通過試錯(cuò),來搜索出特征子集。
還有通過構(gòu)建輔助模型的方法,逐步回歸就是模型構(gòu)造過程中自動(dòng)執(zhí)行特征選擇算法的一個(gè)實(shí)例,還有像Lasso回歸和嶺回歸等正則化方法也被歸入到特征選擇,通過加入額外的約束或者懲罰項(xiàng)加到已有模型(損失函數(shù))上,以防止過擬合并提高泛化能力。
2.6 特征縮放
有時(shí)候,你可能會(huì)注意到某些特征比其他特征擁有高得多的跨度值。舉個(gè)例子,將一個(gè)人的收入和他的年齡進(jìn)行比較,更具體的例子,如某些模型(像嶺回歸)要求你必須將特征值縮放到相同的范圍值內(nèi)。通過縮放可以避免某些特征比其他特征獲得大小非常懸殊的權(quán)重值。
2.7 特征提取
特征提取涉及到從原始屬性中自動(dòng)生成一些新的特征集的一系列算法,降維算法就屬于這一類。特征提取是一個(gè)自動(dòng)將觀測(cè)值降維到一個(gè)足夠建模的小數(shù)據(jù)集的過程。對(duì)于列表數(shù)據(jù),可使用的方法包括一些投影方法,像主成分分析和無監(jiān)督聚類算法。對(duì)于圖形數(shù)據(jù),可能包括一些直線檢測(cè)和邊緣檢測(cè),對(duì)于不同領(lǐng)域有各自的方法。
特征提取的關(guān)鍵點(diǎn)在于這些方法是自動(dòng)的(雖然可能需要從簡單方法中設(shè)計(jì)和構(gòu)建得到),還能夠解決不受控制的高維數(shù)據(jù)的問題。大部分的情況下,是將這些不同類型數(shù)據(jù)(如圖,語言,視頻等)存成數(shù)字格式來進(jìn)行模擬觀察。
簡單的說,特征工程是能夠?qū)?shù)據(jù)像藝術(shù)一樣展現(xiàn)的技術(shù)。為什么這么說呢?因?yàn)楹玫奶卣鞴こ毯芎玫幕旌狭藢I(yè)領(lǐng)域知識(shí)、直覺和基本的數(shù)學(xué)能力。但是最有效的數(shù)據(jù)呈現(xiàn)其實(shí)并不涉及任何的數(shù)據(jù)運(yùn)算。還有什么常用的特征工程呢?

