有的時候,已有的特征可能並沒有有效的表征特征,尤其是針對特殊的業務的時候,極有可能需要對已有的特征進行變換,從而讓特征更加能夠表征特有的業務。這里介紹幾種常用的特征構造方法。
(1) 統計量構造
-
使用常用的統計量構造特征,常用的統計量有:
四分位數、中位數、平均值、標准差、偏差、偏度、偏鋒、離散系統
-
通過加大時間周期構造
例如周和月,統計更長周期例如周和月的數據作為特征。
-
權重
通過時間衰減組合新特征。(越靠近觀測權重值高)
(2) 周期特征
-
前n個周期/天/月/年的周期值,如過去5天分位數、平均值等
-
同比/環比
(3) 特征組合
可以將幾個不同的特征進行組合,新的特征也許能夠更好的表征數據,優先考慮強特征維度,有大概一下幾種組合方式:
-
離散+離散:笛卡爾積
-
離散+連續:連續特征分桶后進行笛卡爾積或基於類別特征 group by,類似於聚類特征構造
-
連續+連續:加減乘除,二階差分等
(4)數學變換
- 基礎數學變換
## 兩個特征相除
autos["stroke_ratio"] = autos.stroke / autos.bore
autos[["stroke", "bore", "stroke_ratio"]].head()
## 幾個特征進行復雜數學運算
autos["displacement"] = (
np.pi * ((0.5 * autos.bore) ** 2) * autos.stroke * autos.num_of_cylinders
)
-
對數變換
對於具有重尾分布的正數值的處理,對數變換是一個非常強大的工具。(與高斯分布相比,重尾分布的概率質量更多地位於尾部。)它壓縮了分布高端的長尾,使之成為較短的尾部,並將低端擴展為更長的頭部。
-
指數變換
指數變換是個變換族,對數變換只是它的一個特例。用統計學術語來說,它們都是方差穩定化變換。
-
Box-Cox 變換
平方根變換和對數變換都可以簡單推廣為Box-Cox變換
(5) 特征拆解
對於一些字符串,可以通過分解,得到一些特征
-
ID numbers:
'123-45-6789' -
Phone numbers:
'(999) 555-0123' -
Street addresses:
'8241 Kaggle Ln., Goose City, NV' -
Internet addresses:
'http://www.kaggle.com -
Product codes:
'0 36000 29145 2' -
Dates and times:
'Mon Sep 30 07:06:05 2013'
customer["Policy"] # from the Policy feature
.str # through the string accessor
.split(" ", expand=True) # by splitting on " "
# and expanding the result into separate columns
customer[["Policy", "Type", "Level"]].head(10)
(6) 降維
降維也是一種常用的特征構造的方法,降維的方法可以查看筆者的sklearn機器學習系列,里面有詳細的介紹。
(7) 新特征發現
有時候,可以通過已有的數據,發現一些新的特征,這個特征可以更加明確的幫助進行分類,想要發現新的特征,需要做到如下:
-
理解特征
-
去了解一些關於數據的領域知識,這些知識可以幫你更好的了解特征
-
研究前人的工作,幫助開闊思路
-
使用數據可視化,可以幫助直觀的觀察數據
(8) 自動構建發現
基於python 和sklearn,有一個稱為gplearn的庫,可以遺傳算法和符號回歸,自動的去探索各種可能的特征組合,從而發現更好的特征。具體使用方式可以查看官方文檔。
參考
《特征工程入門與實踐》
《精通特征工程》
