特徵工程入門:應該保留和去掉那些特徵

在特徵/列上執行的任何可以幫助咱們根據數據進行預測的操做均可以稱爲特徵工程。這將包括如下內容:web

添加新功能
去掉一些講述一樣內容的特徵
將幾個特性結合在一塊兒
將一個特性分解爲多個特性算法

添加新特徵

假設您想預測冰淇淋、手套或傘的銷售。這些東西有什麼共同之處?這些商品的銷售取決於「天氣」和「地點」。冰淇淋在夏天或更熱的地方賣得更多,手套在天氣更冷(冬天)或更冷的地方賣得更多,當下雨的時候咱們確定須要一把雨傘。所以,若是您擁有全部這些產品的歷史銷售數據,那麼在每一個數據級別上添加天氣和銷售區域將有助於您的模型更深刻地瞭解這些模式。機器學習

去掉一些講述一樣內容的特徵

爲了解釋,我製做了一個樣本數據集,它包含了不一樣手機品牌的數據,以下圖所示。讓咱們分析這些數據,並找出爲何咱們應該刪除/消除一些列-svg

如今在這個數據集中,若是咱們仔細看,有一列是品牌名稱,一列是型號名稱,還有一列是手機(它基本上包含了品牌和型號名稱)。所以,若是咱們看到這種狀況,咱們不須要列Phone,由於這一列中的數據已經出如今其餘列中,而且在這種狀況下,分割數據比聚合數據更好。函數

還有另外一列沒有向「數據集-內存」規模添加任何值。全部的內存值都是以「GB」爲單位的,所以沒有必要保留一個不能顯示數據集中任何變化的附加列,由於它不會幫助咱們的模型學習不一樣的模式。學習

結合幾個特性來建立新特性

這意味着咱們可使用2-3個特徵或者行,而後建立一個新的特徵來更好地解釋數據。例如,在上面的數據集中,咱們能夠建立的一些特徵能夠是-計數的手機在每一個品牌,每一個手機在各自品牌的%份額,計數的手機在不一樣的內存大小,每單位內存的價格,等等。這將幫助模型在細粒度級別上理解數據。編碼

將一個特性分解爲多個特性

這個片斷中最多見的例子是日期和地址。一個日期主要由年、月、日組成,好比以「07/28/2019」的形式。若是咱們將日期列分解成2019年,7或7月28日,它會幫助咱們加入各類其餘表的表在一個更簡單的方法,也會容易操做數據,由於如今而不是日期格式,咱們必須處理數字容易得多。翻譯

爲了一樣方便的數據操做和數據鏈接,咱們將地址數據(721 Main St., Apt 24, Dallas, TX-75432)分解爲-街道名稱(721 Main St.)、公寓號碼/門牌號(Apt 24)、城市(Dallas)、州(TX/Texas)、郵政編碼(75432)。3d

特徵工程的經常使用方法

如今咱們知道了什麼是特徵工程,讓咱們來看看咱們能夠經過哪些技術來進行特徵工程。特性工程有各類各樣的方法,但我將討論一些最多見的技術和實踐,我在個人常規問題中使用。xml

時滯——這意味着爲之前的時間戳記錄建立列(銷售前一天、銷售後一個月等等,基於用例)。這個功能能夠幫助咱們瞭解,例如,iPhone 1天前的銷量是多少,2天前的銷量是多少等等。這一點很重要,由於大多數機器學習算法都是逐行查看數據的,除非咱們在同一行中沒有前幾天的記錄,不然模型將沒法有效地在當前和之前的日期記錄之間建立模式。

類別的統計——這能夠是任何簡單的事情,好比統計每一個品牌的手機數量,統計購買iPhone 11pro的人數,統計購買三星Galaxy和iPhone的不一樣年齡段的人數。

總和/平均值/中位數/累積總和/總和-任何數字特徵,如工資,銷售額,利潤,年齡,體重,等等。

分類轉換技術(替換值、單熱編碼、標籤編碼等)——這些技術用於將分類特性轉換爲各自的數字編碼值,由於有些算法(如xgboost)不能識別分類特性。正確的技術取決於每列中的類別數量、分類列的數量等等。

標準化/標準化技術(最小-最大,標準縮放,等等)-可能有一些數據集,你有數字特徵,但它們以不一樣的比例(kg, $, inch, sq.ft等)。所以,對於一些像聚類這樣的機器學習方法來講,咱們必須在一個尺度上擁有全部的數字(咱們將在之後的博客中討論更多關於聚類的內容,可是如今咱們把它理解爲基於類似性在空間中建立數據點的組)。

這些是建立新特性的一些很是廣泛的方法,可是大多數特性工程很大程度上依賴於對圖片中的數據集進行頭腦風暴。例如,若是咱們有員工的數據集,和若是咱們有通常事務的數據集,特徵工程將以不一樣的方式進行。

咱們可使用各類panda函數手動建立這些列。除此以外,還有一個名爲FeatureTools的包,能夠經過結合不一樣級別的數據集來建立新的列。

一旦咱們對數據進行了預處理,咱們就須要開始研究不一樣的ML技術來講明問題。咱們將在接下來的文章中討論這些。但願大家都發現這個文章有趣和有用!😃

做者:Kriti Srivastava

deephub翻譯組