1. 程式人生 > >特征工程:特征抽象、特征衍生

特征工程:特征抽象、特征衍生

woe red fir 應用 fit 過多 only 分類 bubuko

特征工程:特征抽象、特征衍生

特征抽象

這一步是針對有序和無序的文本分類型特征,采用不同的方法進行處理,將其類別屬性數值化。

多值有序特征的屬性數值映射,這步也包含了降維處理(對於高維類別變量),把類別抽象成模型可以識別的特征值。有序特征的映射,使用的方法是先構建一個映射字典mapping,再用pandas的map()或者replace()函數進行映射轉換。

#構建學歷字典
mapping_dict={博士:4,碩士:3,大學:2,大專及以下:1}
#調用map方法進行轉換
data[edu_level_map]=data[edu_level].map(mapping_dict)

多值無序特征的屬性獨熱編碼,使用pandas的get_dummies()方法創建虛擬特征,虛擬特征的每一列各代表變量屬性的一個分類。比如,婚姻狀態。

#調用get_dummies方法進行轉換
dummies=pandas.get_dummies(data,columns=[婚姻狀態],prefix=[婚姻狀態],prefix_sep=_,dummy_na=False,drop_first=False)

特征衍生

特征衍生是指利用現有的特征進行某種組合生成新的特征,主要是從業務數據和純技術生產特征方面著手。

1、業務衍生:從特征的業務意義出發,生成具有不同層面業務含義的新特征。方法:邏輯關聯、增量、頻率分析、相對強度水平等。

這一衍生手段,主要是原始數據方面利用業務思維和統計方法進行衍生,提取一些次級特征。比如邏輯關聯主要是從業務邏輯思路裏提取新的可用特征;從變化幅度大的特征提取出其增量特征;從覆蓋面較大且類別較多的分類特征取出其頻率特征;從特征值分布有差異的數值型特征中提取其相對整體平均值的強度水平或相對某一群體平均值的強度水平等等。

2、技術衍生:在特征計算層次上對特征進行大範圍加工衍生,比如相關特征的加減乘除方、二值化、離散化、交叉組合、多項式融合、算法衍生等。

技術衍生手段,主要是從特征之間關系和特點出發,選擇相應衍生方法生產具有高預測性區分性的特征,這一過程也會產生大量無效或者低效的特征,這些特征在衍生階段不做處理,會在後續的特征選擇中被自動篩選。當然,不同類型和分布特點的特征技術衍生方向也不一樣,根據其特點選擇合適的方法進行衍生,才會更大概率得到有效特征。

(1)數學運算(加減乘除方)衍生新特征,前提是這些數值特征具有一定的運算意義;數值特征還可以根據分布特點進行二值化和離散化處理。

(2)二值化將細粒度的特征度量轉化成粗粒度的度量,使得特征的差異化更大,是與某個閾值比較,把特征的取值轉化為0或1,核心在於設定一個閾值。類似分類特征的獨熱編碼處理。二值化的手段更適用於在某些值或某取值段分布差異大的(偏正態分布)或者缺失嚴重的情況,這一通過二值化,可以把數值特征的類別屬性提取出來,也增強了特征的穩定性。比如取值為有理數的連續值特征(距離特征),有固定幾個取值的枚舉值特征(時間特征)。

枚舉特征處理為二值特征技巧:

將枚舉特征映射為多個特征,每個特征對應一個特定枚舉值,例如今天周幾,可以把它轉換成7個二元特征:今天是否是周一,今天是否是周二,...,今天是否是周日。

連續特征處理為二值特征方法:

先將連續值離散化(或選取幾個閾值節點),再將離散化後的特征切分為多個二元特征,每個特征代表是否在這個區間內。

(3)特征離散化,是對連續取值的特征進行轉換衍生的方法,比如年齡等這樣特征的取值相加相減是沒有實際意義的的數值特征,連續特征離散化的基本假設是連續特征不同區間的取值對結果的貢獻是不一樣的。特征離散化就可以提取這些特征的非線性影響並減弱個別數值(或異常值)的作用強度。

離散化手段(特征分箱)主要有:

有監督分箱:

卡方分箱法(ChiMerge),自底向上的(即基於合並的)數據離散化方法。它依賴於卡方檢驗:具有最小卡方值的相鄰區間合並在一起,直到滿足確定的停止準則。

最小熵法分箱,是類ID3決策樹的方法。首先對某個特征所有值進行排序,通過遍歷該特征所有的值(離散值,連續值需要處理成離散值)。計算信息增益,選擇信息增益大的值作為一個分斷點,然後這個斷點將數據分成兩部分,然後分別對分割的兩部分依次進行上面的操作,直到達到停止條件。停止準則是當得到的每個區間中的類標簽都是一樣。

無監督分箱:

等距分箱,每個區間的特征取值長度相同。

等頻分箱,每個區間包含大致相等的實例數量。

聚類分箱,基於k均值聚類的分箱,在聚類過程中需要保證分箱的有序性:第一個分箱中所有觀測值都要小於第二個分箱中的觀測值,第二個分箱中所有觀測值都要小於第三個分箱中的觀測值等等。

特征離散化後處理:

特征離散化後,連續型變區間型特征可與分類型等特征進行交叉組合,再衍生新特征。特征進行分箱後,根據需要對分箱後的每組(箱)進行woe編碼和IV值的計算,把每個特征組轉換成woe分數。也可以利用IV值對特征離散化進行調整和特征選擇等。

特征交叉組合,指通過將兩個或多個輸入特征相乘(或求笛卡爾積)來對特征空間中的非線性規律進行編碼的合成特征。比如屬性A有三個特征,屬性B有兩個特征,笛卡爾積後就有六個組合特征,然後用one hot或其他embedding方式給新的特征編碼。

交叉組合主要用於離散化特征和分類型特征之間的衍生中,比如地區、年齡、性別這三個交叉組合後,可以得到不同地區的不同年齡(段)男女的交叉數據分布,更好地提升(細化)了年齡和性別的區分性(分布差異性)。在線性模型分類效果不好的情況下,可以通過特征組合的方式增加特征的維度,以求得更好的訓練效果。特征交叉組合是一種讓線性模型學習到非線性特征的方式,對大規模數據集使用特征組合是學習高度復雜模型的一種有效策略。但這種暴力做交叉很可能導致特征稀疏的問題,這裏可以參考FM、FMM以及阿裏媽媽發布的MLR做法。

(4)特征多項式融合,是可以獲得特征的更高維度和互相間關系的項,多項式融合法不僅可以得到特征的交叉組合項還可以得到特征的高次項。在python中通過 PolynomialFeatures函數實現特征多項式生成和修整。比如X的特征經過多項式融合已經從技術分享圖片

轉換為技術分享圖片

。在一些情況下只需要特征間交互項,可以設置 interaction_only得到,

##生成階數為3階的交叉項
>>>poly = PolynomialFeatures(degree=3, interaction_only=True)
>>>poly.fit_transform(X) 

(5)算法衍生新特征,是指利用深度學習方法生成的一些非線性新特征,常被用於模型融合場景中,比如使用GBDT來發掘有區分度的特征以及組合特征,然後直接用於邏輯回歸模型中,常見的融合模型有"GBDT+LR"、"GBDT+FM"都是應用比較廣泛。GBDT構建新特征的主要思想:GBDT每棵樹的路徑直接作為LR輸入特征使用。

用已有特征訓練GBDT模型,然後利用GBDT模型學習到的樹來構造新特征,最後把這些新特征加入原有特征一起訓練模型。構造的新特征向量是取值0/1的,向量的每個元素對應於GBDT模型中樹的葉子結點。當一個樣本點通過某棵樹最終落在這棵樹的一個葉子結點上,那麽在新特征向量中這個葉子結點對應的元素值為1,而這棵樹的其他葉子結點對應的元素值為0。新特征向量的長度等於GBDT模型裏所有樹包含的葉子結點數之和。

技術分享圖片

案例:基於現有特征,利用GBDT學習到兩棵樹,第一棵樹有3個葉子結點,而第二棵樹有2個葉子節點。對於一個輸入樣本x,如果它在第一棵樹最後落在其中的第二個葉子結點,而在第二棵樹裏最後落在其中的第一個葉子結點。那麽通過GBDT獲得的新特征向量為[0,1,0,1,0],其中向量中的前三位對應第一棵樹的3個葉子結點,後兩位對應第二棵樹的2個葉子結點。這類編碼作為新特征輸入到線性分類模型(LR/FM)中進行分類。

每棵樹中的葉子節點代表了樣本具有某種屬性組合,這種屬性組合由於很有意義所以才會存在決策樹中(不然就會被剪支掉)。比如廣告點擊中廣告屬性(國家、節日)這種特征,(中國-春節)和(美國-感恩節)是有意義的特征組合。我們將所有有意義的特征組合提取出來作為一個新的特征,這就是GBDT構建新特征的目的。

來源:https://mp.weixin.qq.com/s?__biz=MzU4NTgxNzY1Nw==&mid=2247483747&idx=1&sn=df40e380144e5a5cfc762cda71bed250&chksm=fd858a35caf2032384a29e0a0cdeeb47de246cfecebcdf3db587341377fa24d575ae597602d9&scene=21#wechat_redirect

特征工程:特征抽象、特征衍生