[特徵工程系列三]顯性特徵的衍生
前一文講的是一些特徵的基礎處理方式,包括怎麼降維、怎麼處理髒資料等等。其實特徵工程真正的難點是如何結合業務需求衍生出新的特徵。結合業務需求講的是利用專家經驗來提取出資料裡對結果影響更大的特徵,往往是原有資料欄位通過加減乘除等操作生成新的欄位,這些欄位在結合一些線性演算法做訓練的時候往往能起到提升模型效果的作用,接下來就簡單介紹下特徵衍生。
因為衍生特徵這個方法是需要結合業務特點的,範圍太廣,所以本文就用一個例子來介紹。今天就用一份NBA比賽資料做例子吧,因為讀者大部分是男同學,對於籃球應該比較熟悉,如果是妹子讀者的話可以諮詢下你的男朋友~
球員 | 投籃數 | 命中數 | 比賽場次 | 全明星 |
科比 | 800 | 400 | 500 | 否 |
喬丹 | 500 | 300 | 200 | 是 |
上面這份資料我就隨便寫兩個球員哈(非黑),然後隨便寫了三個特徵資料分別是投籃數、命中數、比賽場次,目標列就是是否是明星球員。現在要思考這樣的問題,如果只用原始的這三個輸入特徵去做訓練,資訊量可能略顯單薄。先拿“命中率”來講,我們都知道在投籃比賽中命中投籃越多表示這個球員越厲害,原始資料中科比的命中數多於喬丹,而只有喬丹是明星,如果這樣的資料帶入很有可能學出來的效果是“命中球數越多,越不可能成為全明星”,這個理論與我們熟悉的客觀事實不符。
真正熟悉籃球的同學肯定會了解,影響一個球員能否成為明星的關鍵,不是他浪投進了多少,而是更關鍵的是這個球員的命中率。如果我們衍生一個欄位叫命中率,它的計算方式是“命中數/投籃數”,那這個特徵對於資料的刻畫可能更深刻。於是資料變成了:
球員 | 投籃數 | 命中數 | 命中率 | 比賽場次 | 全明星 |
科比 | 800 | 400 | 0.5 | 500 | 否 |
喬丹 | 500 | 300 | 0.6 | 200 | 是 |
在真實業務場景中,特徵衍生往往要覆蓋業務的各個方面,可能要衍生出成百上千的新特徵才能更好的描述訓練資料集的意義。