七种常用特征工程技术
應用機器學習像是把你當一個偉大的工程師,而非偉大的機器學習專家。 ---google
????當在做數據挖掘和數據分析時,數據是所有問題的基礎,并且會影響整個工程的流程。相比一些復雜的算法,如何靈活的處理好數據經常會取到意想不到的效益。而處理數據不可或缺的需要使用到特征工程。
一、什么是特征工程
????簡單的說,特征工程是能夠將數據像藝術一樣展現的技術。為什么這么說呢?因為好的特征工程很好的混合了專業領域知識、直覺和基本的數學能力。但是最有效的數據呈現其實并不涉及任何的數據運算。
????本質上來說,呈現給算法的數據應該能擁有基本數據的相關結構或屬性。當你做特征工程時,其實是將數據屬性轉換為數據特征的過程,屬性代表了數據的所有維度,在數據建模時,如果對原始數據的所有屬性進行學習,并不能很好的找到數據的潛在趨勢,而通過特征工程對你的數據進行預處理的話,你的算法模型能夠減少受到噪聲的干擾,這樣能夠更好的找出趨勢。事實上,好的特征甚至能夠幫你實現使用簡單的模型達到很好的效果。
????但是對于特征工程中引用的新特征,需要驗證它確實提高的預測的準確度,而不是加入了一個無用的特征,不然只會增加算法運算的復雜度。
????本文只提供一些簡單的特征工程技巧,希望能夠在你以后的分析中提供幫忙。
二、常用方法
1. 表示時間戳
????時間戳屬性通常需要分離成多個維度比如年、月、日、小時、分鐘、秒鐘。但是在很多的應用中,大量的信息是不需要的。比如在一個監督系統中,嘗試利用一個’位置+時間‘的函數預測一個城市的交通故障程度,這個實例中,大部分會受到誤導只通過不同的秒數去學習趨勢,其實是不合理的。并且維度'年'也不能很好的給模型增加值的變化,我們可能僅僅需要小時、日、月等維度。因此當我們在呈現時間的時候,試著保證你所提供的所有數據是你的模型所需要的。
????并且別忘了時區,假如你的數據源來自不同的地理數據源,別忘了利用時區將數據標準化。
2. 分解類別屬性
????一些屬性是類別型而不是數值型,舉一個簡單的例子,由{紅,綠、藍}組成的顏色屬性,最常用的方式是把每個類別屬性轉換成二元屬性,即從{0,1}取一個值。因此基本上增加的屬性等于相應數目的類別,并且對于你數據集中的每個實例,只有一個是1(其他的為0),這也就是獨熱(one-hot)編碼方式(類似于轉換成啞變量)。
????如果你不了解這個編碼的話,你可能會覺得分解會增加沒必要的麻煩(因為編碼大量的增加了數據集的維度)。相反,你可能會嘗試將類別屬性轉換成一個標量值,例如顏色屬性可能會用{1,2,3}表示{紅,綠,藍}。這里存在兩個問題,首先,對于一個數學模型,這意味著某種意義上紅色和綠色比和藍色更“相似”(因為|1-3| > |1-2|)。除非你的類別擁有排序的屬性(比如鐵路線上的站),這樣可能會誤導你的模型。然后,可能會導致統計指標(比如均值)無意義,更糟糕的情況是,會誤導你的模型。還是顏色的例子,假如你的數據集包含相同數量的紅色和藍色的實例,但是沒有綠色的,那么顏色的均值可能還是得到2,也就是綠色的意思。
????能夠將類別屬性轉換成一個標量,最有效的場景應該就是只有兩個類別的情況。即{0,1}對應{類別1,類別2}。這種情況下,并不需要排序,并且你可以將屬性的值理解成屬于類別1或類別2的概率。
3.分箱/分區
????有時候,將數值型屬性轉換成類別呈現更有意義,同時能使算法減少噪聲的干擾,通過將一定范圍內的數值劃分成確定的塊。舉個例子,我們預測一個人是否擁有某款衣服,這里年齡是一個確切的因子。其實年齡組是更為相關的因子,所有我們可以將年齡分布劃分成1-10,11-18,19-25,26-40等。而且,不是將這些類別分解成2個點,你可以使用標量值,因為相近的年齡組表現出相似的屬性。
????只有在了解屬性的領域知識的基礎,確定屬性能夠劃分成簡潔的范圍時分區才有意義。即所有的數值落入一個分區時能夠呈現出共同的特征。在實際應用中,當你不想讓你的模型總是嘗試區分值之間是否太近時,分區能夠避免出現過擬合。例如,如果你所感興趣的是將一個城市作為整體,這時你可以將所有落入該城市的維度值進行整合成一個整體。分箱也能減小小錯誤的影響,通過將一個給定值劃入到最近的塊中。如果劃分范圍的數量和所有可能值相近,或對你來說準確率很重要的話,此時分箱就不適合了。
4. 特征交叉
??? 特征交叉算是特征工程中非常重要的方法之一了,特征交叉是一種很獨特的方式,它將兩個或更多的類別屬性組合成一個。當組合的特征要比單個特征更好時,這是一項非常有用的技術。數學上來說,是對類別特征的所有可能值進行交叉相乘。
????假如擁有一個特征A,A有兩個可能值{A1,A2}。擁有一個特征B,存在{B1,B2}等可能值。然后,A&B之間的交叉特征如下:{(A1,B1),(A1,B2),(A2,B1),(A2,B2)},并且你可以給這些組合特征取任何名字。但是需要明白每個組合特征其實代表著A和B各自信息協同作用。
? ? ? ?舉個栗子,如下圖中:
? ? ?所有的藍色點屬于一類,紅色屬于另外一類。我們不考慮實際模型,首先,將X,Y值分成{x<0,x>=0}&{y<0,y>=0}對我們來說會很有用,將劃分結果取名為{Xn,Xp}和{Yn,Yp}。很顯然I&III象限對應于紅色類別,II&IV象限是藍色類。因此如果現在將特征X和特征Y組成成交叉特征,你會有四個象限特征,{I,II,III,IV}分別對應于{(Xp, Yp), (Xn, Yp), (Xn, Yn), (Xp, Yn)}?。
? ? ?一個更好地詮釋好的交叉特征的實例是類似于(經度,緯度)。一個相同的經度對應了地圖上很多的地方,緯度也是一樣。但是一旦你將經度和緯度組合到一起,它們就代表了地理上特定的一塊區域,區域中每一部分是擁有著類似的特性。
? ? ?有時候,能夠通過簡單的數學技巧將數據的屬性組合成一個單一的特征。在上一個例子中,將更改的特征設定為和,并且有如下關系:
? ? ? ? ? ??
將新的特征定義為,有:
? ? ? ? ? ??
我們可以根據確定特征如果,則類別是紅色,如果是為其他值,則是藍色;
5. 特征選擇
? ? ?為了得到更好的模型,使用某些算法自動的選出原始特征的子集。這個過程,你不會構建或修改你擁有的特征,但是會通過修剪特征來達到減少噪聲和冗余。?
那些和我們解決的問題無關需要被移除的屬性,在我們的數據特征中存在了一些特征對于提高模型的準確率比其他更重要的特征,也還有一些特征與其他特征放在一起出現了冗余,特征選擇是通過自動選出對于解決問題最有用的特征子集來解決上述問題的。
????特征選擇算法可能會用到評分方法來排名和選擇特征,比如相關性或其他確定特征重要性的方法,更進一步的方法可能需要通過試錯,來搜索出特征子集。
????還有通過構建輔助模型的方法,逐步回歸就是模型構造過程中自動執行特征選擇算法的一個實例,還有像Lasso回歸和嶺回歸等正則化方法也被歸入到特征選擇,通過加入額外的約束或者懲罰項加到已有模型(損失函數)上,以防止過擬合并提高泛化能力。
6. 特征縮放
????有時候,你可能會注意到某些特征比其他特征擁有高得多的跨度值。舉個例子,將一個人的收入和他的年齡進行比較,更具體的例子,如某些模型(像嶺回歸)要求你必須將特征值縮放到相同的范圍值內。通過縮放可以避免某些特征比其他特征獲得大小非常懸殊的權重值。
7. 特征提取
????特征提取涉及到從原始屬性中自動生成一些新的特征集的一系列算法,降維算法就屬于這一類。特征提取是一個自動將觀測值降維到一個足夠建模的小數據集的過程。對于列表數據,可使用的方法包括一些投影方法,像主成分分析和無監督聚類算法。對于圖形數據,可能包括一些直線檢測和邊緣檢測,對于不同領域有各自的方法。
????特征提取的關鍵點在于這些方法是自動的(雖然可能需要從簡單方法中設計和構建得到),還能夠解決不受控制的高維數據的問題。大部分的情況下,是將這些不同類型數據(如圖,語言,視頻等)存成數字格式來進行模擬觀察。
?
免責聲明:本文系網絡轉載。版權歸原作者所有。如涉及版權,請聯系刪除!
原文鏈接:https://codesachin.wordpress.com/2016/06/25/non-mathematical-feature-engineering-techniques-for-data-science/
總結
以上是生活随笔為你收集整理的七种常用特征工程技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解ThreadLocal
- 下一篇: 无约束优化方法