特征工程是機器學習中至關重要的一步,它直接影響模型的性能和泛化能力。特征構造、特征選擇、特征轉換和特征提取——構成了特征工程的核心流程。下面我來系統地梳理一下它們的定義、方法和應用場景:
整理 by?Moshow鄭鍇@https://zhengkai.blog.csdn.net/
🏗? 特征工程總覽
特征工程的目標是從原始數據中提取出對模型有用的信息,使模型更容易學習、預測更準確。它包括以下幾個部分:
🔧 特征構造(Feature Construction)
定義:基于原始特征創建新的特征,以增強模型的表達能力。
方法示例:
-
數學組合:如
BMI = weight / height2
-
時間衍生:從時間戳中提取“小時”、“星期幾”、“是否節假日”等
-
文本處理:從文本中提取關鍵詞、情感分數、詞頻等
-
分組統計:如每個用戶的平均購買金額、點擊次數等
特征類型 | 方法名稱 | 方法說明 | 示例應用場景 |
---|---|---|---|
數值型特征 | 數學組合 | 將多個數值特征進行加減乘除等組合,構造新特征 | BMI = 體重 / 身高2 |
分箱(Binning) | 將連續變量離散化為區間,如年齡分組 | 年齡 → 青年/中年/老年 | |
比率構造 | 構造比例特征,反映相對關系 | 銷售額 / 訪問量 → 轉化率 | |
差值構造 | 構造差異特征,捕捉變化趨勢 | 當前價格 - 昨日價格 | |
類別型特征 | 頻率編碼 | 用類別出現頻率替代原始類別 | 用戶地區 → 地區訪問頻率 |
目標編碼(Target Encoding) | 用類別對應的目標變量均值進行編碼 | 用戶類型 → 平均購買金額 | |
組合特征 | 將多個類別特征組合成新的交叉特征 | 性別 + 地區 → 性別_地區組合 | |
時間型特征 | 時間衍生特征 | 從時間戳中提取年、月、日、小時、星期幾等 | 交易時間 → 是否周末、是否夜間 |
時間差值 | 計算兩個時間點之間的間隔 | 注冊時間與首次購買時間差 | |
滾動窗口統計 | 在時間序列中計算滑動窗口內的均值、最大值等 | 最近7天平均點擊量 | |
文本特征 | 關鍵詞提取(TF-IDF) | 提取文本中的關鍵詞并量化其重要性 | 評論文本 → 關鍵詞權重 |
情感分數 | 分析文本情感傾向,構造情感強度特征 | 評論 → 情感得分(正/負) | |
文本長度 | 統計文本長度、詞數等作為特征 | 評論 → 字符數、詞數 | |
統計特征 | 分組統計 | 按某個類別分組后計算均值、最大值、標準差等 | 用戶ID → 平均購買金額 |
排名特征 | 在組內對某個數值特征進行排序,構造排名特征 | 用戶在地區內的購買排名 | |
聚合特征 | 對多個相關特征進行聚合,如求和、均值 | 多個商品評分 → 平均評分 |
🧠 特征選擇(Feature Selection)
特征選擇是為了去除冗余或無關特征,提升模型性能。嵌入方法(Embedded Methods) 是其中一種。
典型方法:
-
Lasso 回歸(L1 正則化):會將部分特征系數壓縮為零
-
決策樹/隨機森林:通過特征重要性(feature importance)進行選擇
-
基于梯度提升(如 XGBoost)的特征評分
方法類別 | 方法名稱 | 原理簡述 | 適用場景/模型示例 |
---|---|---|---|
過濾法(Filter) | 方差選擇法(Variance Threshold) | 刪除方差低于閾值的特征,認為其信息量少 | 預處理階段,適用于所有模型 |
相關系數法(Pearson/Spearman) | 計算特征與目標變量的相關性,選擇相關性高的特征 | 回歸任務、線性模型 | |
卡方檢驗(Chi-Square) | 評估特征與類別之間的獨立性,適用于分類任務 | 分類任務,如樸素貝葉斯、KNN | |
信息增益(Information Gain) | 衡量特征對目標變量的信息貢獻 | 決策樹、隨機森林 | |
互信息(Mutual Information) | 衡量兩個變量之間的依賴關系 | 分類與回歸任務 | |
包裹法(Wrapper) | 遞歸特征消除(RFE) | 反復訓練模型并移除最不重要的特征,直到達到預期維度 | 支持向量機、線性回歸等 |
前向/后向選擇 | 從空集開始逐步添加或從全集開始逐步移除特征,評估模型性能變化 | 小規模數據集,模型訓練成本高 | |
嵌入法(Embedded) | Lasso 回歸(L1 正則化) | 自動將部分特征系數壓縮為零,實現特征選擇 | 線性模型、邏輯回歸 |
決策樹/隨機森林特征重要性 | 利用樹模型的特征重要性評分進行選擇 | 樹模型(如 XGBoost、LightGBM) | |
正則化的邏輯回歸/線性模型 | 通過正則項控制特征數量,保留對目標影響大的特征 | 高維稀疏數據 |
🔄 特征轉換(Feature Transformation)
定義:對特征進行數學變換,使其更適合模型學習。
常見方法:
方法 | 說明 |
---|---|
歸一化(Min-Max) | 將特征縮放到 [0,1] 區間,適用于距離度量模型(如KNN) |
標準化(Z-score) | 將特征轉換為均值為0、標準差為1的分布,適用于線性模型、SVM等 |
對數變換 | 處理偏態分布,減少極端值影響,如將收入、點擊次數等取對數 |
Box-Cox / Yeo-Johnson | 更靈活的冪變換,適用于非正值數據 |
詳細方法:
特征類型 | 轉換方法名稱 | 方法說明 | 示例應用場景 |
---|---|---|---|
數值型特征 | 標準化(Standardization) | 將特征轉換為均值為0、標準差為1的分布 | 適用于線性模型、SVM |
歸一化(Min-Max Scaling) | 將特征縮放到固定區間(如0~1) | 圖像像素處理、神經網絡輸入 | |
對數變換(Log Transform) | 緩解右偏分布,提高模型穩定性 | 收入、交易金額等長尾分布 | |
Box-Cox變換 | 用于將非正態分布轉換為近似正態分布 | 金融風險建模 | |
Yeo-Johnson變換 | Box-Cox的擴展,支持負值 | 含負值的數值特征 | |
多項式擴展(Polynomial Features) | 構造高階特征以捕捉非線性關系 | 回歸模型中提升擬合能力 | |
類別型特征 | One-Hot編碼 | 將每個類別轉換為一個獨立的二元特征 | 決策樹、邏輯回歸 |
標簽編碼(Label Encoding) | 將類別映射為整數 | 樹模型(如XGBoost) | |
二元編碼(Binary Encoding) | 將類別轉換為二進制形式,減少維度 | 高基數類別特征 | |
哈希編碼(Hashing Encoding) | 使用哈希函數將類別映射到固定維度空間 | 文本分類、推薦系統 | |
時間型特征 | 周期性轉換(Sin/Cos Encoding) | 將時間特征轉換為正弦/余弦形式以保留周期性信息 | 小時、星期幾等周期性時間特征 |
時間差轉換 | 計算時間間隔作為新特征 | 注冊時間與購買時間差 | |
時間窗口聚合 | 在時間序列中進行滑動窗口統計 | 最近7天平均訪問量 | |
文本特征 | TF-IDF轉換 | 計算詞頻-逆文檔頻率,衡量詞的重要性 | 評論分析、文本分類 |
Word Embedding(詞嵌入) | 將詞轉換為向量,保留語義關系 | NLP模型輸入 | |
文本向量化(CountVectorizer) | 將文本轉換為詞頻向量 | 基礎文本建模 | |
其他轉換 | 主成分分析(PCA) | 降維方法,保留主要信息減少冗余 | 高維數據可視化、加速訓練 |
特征離散化 | 將連續變量轉換為離散類別 | 年齡 → 年齡段 | |
分組統計轉換 | 按類別分組后計算均值、最大值等統計量 | 用戶ID → 平均購買金額 |
🧬 特征提取(Feature Extraction)
定義:從原始數據中提取出新的表示方式,通常用于高維數據降維。
常見方法:
-
主成分分析(PCA):線性降維,保留最大方差方向
-
線性判別分析(LDA):用于分類任務的降維
-
自編碼器(Autoencoder):通過神經網絡學習壓縮表示
-
t-SNE / UMAP:用于可視化的非線性降維方法
全部方法:
方法類別 | 方法名稱 | 方法說明 | 應用場景示例 |
---|---|---|---|
線性降維 | 主成分分析(PCA) | 將高維數據投影到低維空間,保留最大方差方向的信息 | 圖像壓縮、數據可視化 |
線性判別分析(LDA) | 尋找能最大化類別間距離、最小化類內距離的投影方向 | 分類任務中的降維 | |
非線性降維 | 核主成分分析(Kernel PCA) | 在高維核空間中進行PCA,捕捉非線性特征關系 | 非線性結構數據降維 |
t-SNE | 保留局部結構的非線性降維方法,常用于高維數據可視化 | NLP嵌入可視化、圖像聚類可視化 | |
UMAP | 保留全局和局部結構的非線性降維方法,比t-SNE計算更快 | 大規模數據可視化 | |
矩陣分解 | 奇異值分解(SVD) | 將矩陣分解為奇異向量和奇異值,提取主要成分 | 潛在語義分析(LSA)、推薦系統 |
非負矩陣分解(NMF) | 分解成非負矩陣,適合可解釋性需求 | 文本主題提取 | |
統計特征 | 傅里葉變換(FFT) | 將時域信號轉換到頻域,提取頻譜特征 | 語音分析、振動信號檢測 |
小波變換(Wavelet Transform) | 提取不同時間尺度下的頻率信息 | 時間序列分析、圖像壓縮 | |
深度學習 | 自編碼器(Autoencoder) | 通過神經網絡編碼-解碼結構學習低維表示 | 圖像去噪、特征壓縮 |
卷積神經網絡特征(CNN Features) | 利用卷積層提取空間局部特征 | 圖像識別、目標檢測 | |
詞嵌入(Word Embedding) | 將詞語映射到連續向量空間,保留語義關系 | NLP任務(Word2Vec、GloVe、BERT) | |
嵌入方法 | 圖嵌入(Graph Embedding) | 將圖結構映射到低維向量空間,保留節點關系 | 社交網絡分析、知識圖譜 |
序列嵌入(Sequence Embedding) | 將時序/序列數據編碼為向量 | 推薦系統、行為預測 |
💡 小貼士:
-
如果是高維稠密數值數據,PCA/LDA 是首選
-
如果是非線性分布,可以試試 Kernel PCA、UMAP
-
深度學習任務中,CNN/RNN 提取的高層特征往往比人工特征更具表現力
-
文本類任務中,詞嵌入技術幾乎是標配
-
?整理 by?Moshow鄭鍇@https://zhengkai.blog.csdn.net/
📊 特征工程性能評估指標
指標類別 | 具體指標 | 說明 | 典型用途/場景 |
---|---|---|---|
模型性能類 | 準確率(Accuracy) | 正確預測占總樣本的比例 | 分類任務,類別均衡時適用 |
精確率(Precision) | 預測為正的樣本中實際為正的比例 | 正樣本代價高時(如詐騙檢測) | |
召回率(Recall) | 實際為正的樣本中被正確預測的比例 | 追求漏報率低(如疾病篩查) | |
F1-Score | 精確率與召回率的調和平均 | 平衡Precision與Recall | |
ROC-AUC | 衡量分類器對正負樣本的區分能力 | 二分類、類別不均衡 | |
RMSE/MAE | 回歸任務中預測值與真實值的偏差 | 連續值預測(如房價預測) | |
特征質量類 | 特征重要性(Feature Importance) | 模型輸出的各特征貢獻度 | 決策樹、XGBoost、LightGBM |
相關性(Correlation) | 與目標變量或其他特征的相關程度 | 過濾冗余或多重共線性 | |
信息增益(Information Gain) | 特征對類別區分的貢獻 | 分類模型、樹模型 | |
稀疏度(Sparsity) | 特征矩陣中零值的比例 | 稀疏矩陣優化、文本特征 | |
方差(Variance) | 特征取值的分散程度,低方差特征信息量少 | 特征篩選前的快速過濾 |
💡 小貼士:
-
在評估特征工程效果時,應固定模型和數據集,只比較特征變化前后的指標差異,才能確保改進是由特征工程帶來的
-
如果是高維稀疏特征,可以多看稀疏度、特征重要性等;如果是時序或非結構化數據,則可結合任務相關指標
-
有時單個特征看起來不強,但和其他特征組合后效果更好,需要通過模型性能指標驗證