學習題目:天池-二手車價格預測
https://tianchi.aliyun.com/competition/entrance/231784/information
資料挖掘-特征工程
https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12586969.1002.12.1cd81b438QtUxo&postId=95501
常見的特征工程包括:
1.異常處理:
通過箱線圖(或 3-Sigma)分析删除異常值;
BOX-COX 轉換(處理有偏分布);
長尾截斷;
2.特征歸一化/标準化:
标準化(轉換為标準正态分布);
歸一化(抓換到 [0,1] 區間);
針對幂律分布,可以采用公式: log(1+x1+median)log(1+x1+median)
3.資料分桶:
等頻分桶;
等距分桶;
Best-KS 分桶(類似利用基尼指數進行二分類);
卡方分桶;
4.缺失值處理:
不處理(針對類似 XGBoost 等樹模型);
删除(缺失資料太多);
插值補全,包括均值/中位數/衆數/模組化預測/多重插補/壓縮感覺補全/矩陣補全等;
分箱,缺失值一個箱;
5.特征構造:
構造統計量特征,報告計數、求和、比例、标準差等;
時間特征,包括相對時間和絕對時間,節假日,雙休日等;
地理資訊,包括分箱,分布編碼等方法;
非線性變換,包括 log/ 平方/ 根号等;
特征組合,特征交叉;
仁者見仁,智者見智。
6.特征篩選
過濾式(filter):先對資料進行特征選擇,然後在訓練學習器,常見的方法有 Relief/方差選擇發/相關系數法/卡方檢驗法/互資訊法;
包裹式(wrapper):直接把最終将要使用的學習器的性能作為特征子集的評價準則,常見方法有 LVM(Las Vegas Wrapper) ;
嵌入式(embedding):結合過濾式和包裹式,學習器訓練過程中自動進行了特征選擇,常見的有 lasso 回歸;
7.降維
PCA/ LDA/ ICA;
特征選擇也是一種降維。
箱型圖去除異常值,可以直接調用
def box_plot_outliers(data_ser, box_scale):
"""
利用箱線圖去除異常值
:param data_ser: 接收 pandas.series 資料格式
:param box_scale: 箱線圖尺度,
:return:
"""
iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
val_low = data_ser.quantile(0.25) - iqr
val_up = data_ser.quantile(0.75) + iqr
rule_low = (data_ser < val_low)
rule_up = (data_ser > val_up)
return (rule_low, rule_up), (val_low, val_up)
對于長尾分布或者左偏分布。可以使用log變換
data["price"]=np.log1p(data["price"])
##如果是對于預測值進行變換,最後需要還原
data["price"]= np.e**(data["price"])-1
多項式特征建構
##多項式特征建構
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
data=np.arange(6).reshape(3,2)
poly = PolynomialFeatures(2)
poly.fit_transform(X)
#interaction_only=True時,則隻選取特征間的互動項,
#x1^2就不會被生成
poly = PolynomialFeatures(degree=3, interaction_only=True)
poly.fit_transform(X)
參考:https://blog.csdn.net/levy_cui/article/details/100557454
特征篩選:
參考:https://blog.csdn.net/qq_33876194/article/details/88403394
#補充
對于文本式類别變量,如果因為他出現的變量比較多dummy不好處理,。是以Pandas有一個方法叫做factorize(),它可以建立一些數字,來表示類别變量,對每一個類别映射一個ID,這種映射最後隻生成一個特征,不像dummy那樣生成多個特征。