在特征/列上執行的任何能夠幫助我們根據資料進行預測的操作都可以稱為特征工程。這将包括以下内容:
添加新功能去掉一些講述同樣内容的特征将幾個特性結合在一起将一個特性分解為多個特性

添加新特征
假設您想預測冰淇淋、手套或傘的銷售。這些東西有什麼共同之處?這些商品的銷售取決于“天氣”和“地點”。冰淇淋在夏天或更熱的地方賣得更多,手套在天氣更冷(冬天)或更冷的地方賣得更多,當下雨的時候我們肯定需要一把雨傘。是以,如果您擁有所有這些産品的曆史銷售資料,那麼在每個資料級别上添加天氣和銷售區域将有助于您的模型更深入地了解這些模式。
去掉一些講述同樣内容的特征
為了解釋,我制作了一個樣本資料集,它包含了不同手機品牌的資料,如下圖所示。讓我們分析這些資料,并找出為什麼我們應該删除/消除一些列-
現在在這個資料集中,如果我們仔細看,有一列是品牌名稱,一列是型号名稱,還有一列是手機(它基本上包含了品牌和型号名稱)。是以,如果我們看到這種情況,我們不需要列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)。
特征工程的常用方法
現在我們知道了什麼是特征工程,讓我們來看看我們可以通過哪些技術來進行特征工程。特性工程有各種各樣的方法,但我将讨論一些最常見的技術和實踐,我在我的正常問題中使用。
時滞——這意味着為以前的時間戳記錄建立列(銷售前一天、銷售後一個月等等,基于用例)。這個功能可以幫助我們了解,例如,iPhone 1天前的銷量是多少,2天前的銷量是多少等等。這一點很重要,因為大多數機器學習算法都是逐行檢視資料的,除非我們在同一行中沒有前幾天的記錄,否則模型将無法有效地在目前和以前的日期記錄之間建立模式。
類别的統計——這可以是任何簡單的事情,比如統計每個品牌的手機數量,統計購買iPhone 11pro的人數,統計購買三星Galaxy和iPhone的不同年齡段的人數。
總和/平均值/中位數/累積總和/總和-任何數字特征,如工資,銷售額,利潤,年齡,體重,等等。
分類轉換技術(替換值、單熱編碼、标簽編碼等)——這些技術用于将分類特性轉換為各自的數字編碼值,因為有些算法(如xgboost)不能識别分類特性。正确的技術取決于每列中的類别數量、分類列的數量等等。
标準化/标準化技術(最小-最大,标準縮放,等等)-可能有一些資料集,你有數字特征,但它們以不同的比例(kg, $, inch, sq.ft等)。是以,對于一些像聚類這樣的機器學習方法來說,我們必須在一個尺度上擁有所有的數字(我們将在以後的部落格中讨論更多關于聚類的内容,但是現在我們把它了解為基于相似性在空間中建立資料點的組)。
這些是建立新特性的一些非常普遍的方法,但是大多數特性工程很大程度上依賴于對圖檔中的資料集進行頭腦風暴。例如,如果我們有員工的資料集,和如果我們有一般事務的資料集,特征工程将以不同的方式進行。
我們可以使用各種panda函數手動建立這些列。除此之外,還有一個名為FeatureTools的包,可以通過結合不同級别的資料集來建立新的列。
一旦我們對資料進行了預處理,我們就需要開始研究不同的ML技術來說明問題。我們将在接下來的文章中讨論這些。希望你們都發現這個文章有趣和有用!:)
作者:Kriti Srivastava
deephub翻譯組