AI時代系列(1) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
15/100 第二週:資料處理與特徵工程
15. 特徵選擇技術 🎯 選對特徵,讓 AI 模型表現大幅提升!
特徵選擇技術 🎯
在機器學習中,特徵選擇(Feature Selection) 是提升模型效能的關鍵步驟之一。選擇對的特徵可以:
✅ 減少過擬合(Overfitting)
✅ 提升運算效率(降低計算成本)
✅ 提高模型準確度
特徵選擇的方法可以分為三大類:
1️⃣ 過濾法(Filter Methods)
2️⃣ 包裝法(Wrapper Methods)
3️⃣ 嵌入法(Embedded Methods)
________________________________________
1️⃣ 過濾法(Filter Methods)🔍
這類方法獨立於模型,透過統計方法篩選出對目標變數有較大影響的特徵。
🎯 常見方法
(1). 相關係數(Correlation) : 選擇與目標變數高度相關的特徵(如 Pearson、Spearman 相關係數)
(2). 卡方檢定(Chi-Square Test): 適用於分類問題,評估變數與目標變數的獨立性
(3). 互信息(Mutual Information): 測量變數與目標變數之間的信息增益
(4). 變異數閾值(Variance Threshold) : 移除變異數過低的特徵(例如都是同一個值)
✅ 使用方式(Python)
python
import pandas as pd
from sklearn.feature_selection import VarianceThreshold, SelectKBest, chi2
# 假設有一個特徵數據集 X 和目標變數 y
X = pd.DataFrame({
'Feature1': [1, 2, 3, 4, 5],
'Feature2': [1, 1, 1, 1, 1], # 低變異數
'Feature3': [2, 4, 6, 8, 10]
})
y = [0, 1, 0, 1, 0]
# 移除變異數低的特徵
selector = VarianceThreshold(threshold=0.1)
X_selected = selector.fit_transform(X)
# 使用卡方檢定
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
📌 適用情境
• 大量特徵時,可快速刪除不相關的特徵,減少計算量。
• 適合前期探索,搭配其他方法進一步優化。
________________________________________
2️⃣ 包裝法(Wrapper Methods)🎁
這類方法直接與機器學習模型互動,透過不同組合的特徵進行評估,選擇最好的組合。
🎯 常見方法
(1). 遞歸特徵消除(RFE, Recursive Feature Elimination): 透過反覆訓練模型,刪除影響較小的特徵
(2). Forward Selection : 從空集合開始,每次加入對模型表現影響最大的特徵
(3). Backward Elimination : 一開始包含所有特徵,然後逐步刪除影響最小的特徵
✅ 使用方式(Python)
python
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# 使用邏輯回歸作為基礎模型
model = LogisticRegression()
rfe = RFE(model, n_features_to_select=2) # 選擇 2 個特徵
X_selected = rfe.fit_transform(X, y)
# 看看哪些特徵被選中了
print(rfe.support_) # 會輸出 [True, False, True]
📌 適用情境
• 適合數據量較小的情況,但計算成本較高。
• 適合用於希望找出影響模型預測結果最顯著的特徵。
________________________________________
3️⃣ 嵌入法(Embedded Methods)⚡
這類方法直接在訓練模型時進行特徵選擇,例如 決策樹、Lasso 正則化等 方法。
🎯 常見方法
(1). L1 正則化(Lasso Regression) : 透過 L1 正則化(Lasso)將不重要的特徵權重壓縮為 0
(2). 決策樹特徵重要性(Feature Importance) : 透過決策樹模型(如 XGBoost、Random Forest)評估特徵重要性
(3). 基於 SHAP 值的解釋(SHAP Values) : 解釋模型中不同特徵對預測結果的影響程度
✅ 使用方式(Python)
python
from sklearn.ensemble import RandomForestClassifier
import numpy as np
# 訓練隨機森林模型
model = RandomForestClassifier()
model.fit(X, y)
# 取得特徵重要性
feature_importance = model.feature_importances_
print(feature_importance) # 會輸出 [0.4, 0.1, 0.5]
📌 適用情境
• Lasso 適用於高維度數據,可自動選擇最重要的特徵。
• 決策樹特徵重要性 適合處理數值和類別型特徵。
• SHAP 值 適合需要高度解釋性的應用,例如金融風險評估。
________________________________________
🛠 如何選擇適合的特徵選擇方法?
在特徵選擇的過程中,根據需求與數據特性可以選擇不同的方法。若目的是快速篩選特徵,常用的過濾法(如相關係數、卡方檢定)能夠在初步特徵工程階段,快速排除與目標變數無關的特徵,提升後續建模效率。
當需要更進一步考慮模型表現時,可以採用包裝法(如遞迴特徵消除 RFE、前向選擇 Forward Selection),這類方法透過不斷測試不同特徵組合來提升模型效果,特別適用於小型數據集。
若面對的是高維度數據,或需要進行特徵重要性分析時,嵌入法(如 Lasso 正則化、決策樹算法或 SHAP 解釋器)則能自動從建模過程中挑選出關鍵特徵,兼顧效率與準確性。
選擇合適的方法能有效提升模型表現並減少過擬合風險。
📌 進階建議
• 結合多種方法:先用過濾法篩選,再用包裝法或嵌入法微調。
• 視需求選擇:如果特徵過多(>1000),建議使用嵌入法或過濾法。
• 避免過度選擇:刪除太多特徵可能會影響模型的表現,適當進行交叉驗證(Cross Validation)。
🎯 結論:選對特徵 = 提升準確度 + 減少計算成本 🚀