Python特征工程 Python機器學習數據預處理

數據預處理和特征工程決定模型表現上限,需重視數據質量而非僅調參。1. 缺失值處理應先理解原因,再選擇填充或保留缺失信息,避免直接刪除;2. 類別編碼根據類別數量選擇one-hot或目標編碼,防止維度爆炸;3. 特征縮放視模型而定,樹模型無需縮放,線性模型則需標準化或歸一化;4. 構造衍生特征應結合業務背景提取關鍵信息,避免盲目增加復雜度。掌握這些方法能提升模型效果。

Python特征工程 Python機器學習數據預處理

在做機器學習項目時,數據預處理和特征工程往往決定了模型表現的上限。很多人把注意力放在模型調參上,卻忽略了輸入數據本身的質量。其實,模型就像發動機,數據才是燃料,再好的引擎也跑不過劣質油。

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. 構造衍生特征:從已有數據中提取信息

有時候原始數據并不能直接反映問題的本質,需要構造一些衍生特征。比如電商場景下,用戶的歷史行為數據中有“總購買次數”和“總消費金額”,我們可以構造“平均每次消費金額”作為新特征。

這類操作的關鍵點在于:

  • 結合業務背景,找出有意義的組合或變換
  • 不要盲目生成太多特征,增加復雜度的同時可能引入噪聲
  • 可以嘗試對時間字段進行拆解,比如從“下單時間”中提取小時、星期幾等信息

比如銷售預測任務中,“節假日前后幾天”這個時間段往往有特殊意義,可以構造一個是否為節前/節后一周的布爾特征。

基本上就這些。特征工程沒有固定套路,但掌握好基礎方法能解決大部分問題,剩下的靠經驗和實驗驗證。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享