數據預處理和特征工程決定模型表現上限,需重視數據質量而非僅調參。1. 缺失值處理應先理解原因,再選擇填充或保留缺失信息,避免直接刪除;2. 類別編碼根據類別數量選擇one-hot或目標編碼,防止維度爆炸;3. 特征縮放視模型而定,樹模型無需縮放,線性模型則需標準化或歸一化;4. 構造衍生特征應結合業務背景提取關鍵信息,避免盲目增加復雜度。掌握這些方法能提升模型效果。
在做機器學習項目時,數據預處理和特征工程往往決定了模型表現的上限。很多人把注意力放在模型調參上,卻忽略了輸入數據本身的質量。其實,模型就像發動機,數據才是燃料,再好的引擎也跑不過劣質油。
1. 缺失值處理:別一上來就刪
現實中的數據集很少是完整的,缺失值幾乎是常態。但直接刪除有缺失的樣本或者列,往往會損失大量信息。比如電商用戶購買記錄中,某些字段(如“最近一次下單時間”)缺失,可能代表該用戶是新用戶,而不是數據錯誤。
這時候可以考慮:
立即學習“Python免費學習筆記(深入)”;
- 用平均數、中位數或眾數填充數值型字段
- 對類別變量,用”Unknown”或”Missing”作為一個新的類別來保留缺失信息
- 如果缺失比例特別高(比如超過70%),那確實要考慮刪除字段了
關鍵是理解缺失背后的原因,不同處理方式對模型的影響會很大。
2. 類別特征編碼:不是所有分類都要One-Hot
類別型變量不能直接喂給大多數模型,需要轉換成數字。One-Hot編碼是最常見的做法,但不一定總是最優。
比如城市這個字段,如果類別太多(比如上百個城市),One-Hot會導致維度爆炸,這時候可以用目標編碼(Target Encoding)或頻率編碼(Frequency Encoding)。例如,用每個城市的點擊率作為替代值,既能保留信息又不會增加維度。
一些簡單規則:
- 類別不多時(比如顏色紅綠藍),One-Hot很合適
- 類別很多時,考慮目標編碼或分箱處理
- 時間序列任務中,慎用目標編碼,容易造成信息泄露
3. 特征縮放:看模型是否“計較”
像決策樹類模型(如XGBoost、LightGBM)并不需要特征標準化,它們對輸入尺度不敏感。但如果是邏輯回歸、K近鄰、SVM這些模型,特征的尺度差異會影響訓練效果和收斂速度。
常見做法有:
- 標準化(Z-Score):適用于分布較正態的情況
- 歸一化(Min-Max):適合數據范圍明確的任務,比如圖像處理中的像素值歸到[0,1]
舉個例子,如果你的數據里有一個字段是年齡(0~100),另一個是收入(幾千到幾十萬),不做縮放的話,模型可能會過度關注收入這個字段。
4. 構造衍生特征:從已有數據中提取信息
有時候原始數據并不能直接反映問題的本質,需要構造一些衍生特征。比如電商場景下,用戶的歷史行為數據中有“總購買次數”和“總消費金額”,我們可以構造“平均每次消費金額”作為新特征。
這類操作的關鍵點在于:
- 結合業務背景,找出有意義的組合或變換
- 不要盲目生成太多特征,增加復雜度的同時可能引入噪聲
- 可以嘗試對時間字段進行拆解,比如從“下單時間”中提取小時、星期幾等信息
比如銷售預測任務中,“節假日前后幾天”這個時間段往往有特殊意義,可以構造一個是否為節前/節后一周的布爾特征。
基本上就這些。特征工程沒有固定套路,但掌握好基礎方法能解決大部分問題,剩下的靠經驗和實驗驗證。