從 0 開始學特徵工程:搞懂 Filter Methods 與 Wrapper Methods 的差異與應用

想提升機器學習準確度嗎?本文專為程式初學者設計,深度解析特徵工程 (Feature Engineering) 核心概念。從資料轉換到關鍵的特徵選擇,詳解 Filter Methods 與 Wrapper Methods 的優缺點,助你優化資料結構,打造最強預測模型。

特徵工程 (Feature Engineering) 是將原始資料轉化為模型特徵的過程,核心方法包含資料轉換、建構與選擇。

其中「特徵選擇」最為關鍵,分為不考慮模型的 Filter Methods (過濾法) 與依賴模型評估的 Wrapper Methods (包裝法)

適當的特徵工程能提高模型準確性並防止過度擬合。

特徵工程在資料科學中,透過巧妙的轉換和組合資料,提升機器學習模型效能的藝術。

在機器學習建模前,我們已經搜集好相關的資料,並且經過適當的資料清洗和探索性的資料分析過後,接著就是要進行資料的特徵工程任務。

什麼是特徵工程?

特徵工程是對原始資料進行轉換和處理,以提取或建立更有用的訊息,而有用的訊息指的就是使用特徵(Feature),使用有效的特徵可以提高機器學習模型的性能。

特徵工程的目標是將原始資料轉化為能夠更好的解釋問題本質的特徵,以增強模型的泛化能力、降低過度擬合(Overfitting)的風險,進而提高模型的準確性和效能。

在特徵工程領域,主要的方法類型包含:

  1. 資料轉換(Data Transformation): 對資料進行轉換,使資料的特性能符合模型的需求或是改進模型的效能。
  2. 特徵建構(Feature Creation): 基於原始特徵建構新的特徵,以提供模型更多的資訊。
  3. 特徵提取(Feature Extraction): 將原始資料轉換為更高層次、更有信息量的表示方法。
  4. 特徵選擇(Feature Selection): 選擇資料當中最重要的特徵,或是去除冗餘或不重要的特徵,以減少維度並提高模型的訓練速度。

資料轉換處理

資料轉換當中包含了幾種常見的轉換技巧,像是標準化、正歸化或是對數轉換,不同的轉換技巧會適用在不同的機器學習建模場域,在此簡單的說明上述三種

  • 標準化(Standardization):標準化的原理主要是將所有會使用到的資料先進行統計,得到平均值與標準差的參數後才進行轉換,使資料的分布更接近常態分布,轉換後資料的平均值為0,標準差為1,經過標準化的資料較有利於線性模型的建模。
  • 正規化(Normalization):正規化的用意是有效的調整資料範圍的技巧,使資料的區間落在一定範圍內,而不改變原本的分佈情形,調整過後的數值通常是[0,1] 或是 [−1,1],這樣的轉換可以確保不同的特徵之間,彼此具有相似的尺度,避免某些特徵對模型的影響過大。
  • 對數轉換(Logarithmic Transformation):對數轉換主要的應用是在面對回歸問題上,也就是進行數值的預測,經由模型來預測出一個接近真實數據的數值,大多的機器學習模型進行在回歸預測的前提假設,為資料的分佈必須要是常態分佈(Normal Distribution),由於現實世界中蒐集到的資料不一定會剛好是標準的常態分佈,大多會呈現偏態分佈(左偏、右偏)的情形,所以在進行機器學習建模以前,會需要事先進行對數轉換的工程。

資料特徵的建構

特徵建構的用途會視不同的建模類型來進行處理,例如時間序列相關的模型就會進行不同時間單位的特徵(年月時分秒),另外在資料型態上的處理,類別型的資料可以轉換為連續型資料,被稱為特徵「編碼」(encoding),使轉換後的資料能夠在模型中進行運算,最常見的編碼方式包括「獨熱編碼」(One-Hot Encoding)和「標籤編碼」(Label Encoding)。

  1. 獨熱編碼(One-Hot Encoding): 將每個類別創建為一個新的二元特徵,其中僅一個特徵(獨熱位)為1,其餘為0。這種編碼方式適用於無順序關係的類別。例如,將顏色類別(紅、綠、藍)編碼為三個二元特徵:Is_Red, Is_Green, Is_Blue。
  2. 標籤編碼(Label Encoding): 將每個類別映射為一個整數。這種編碼方式適用於有序的類別,因為它會給類別分配有意義的整數值。例如,將尺寸類別(小、中、大)編碼為整數(0、1、2)。

連續型資料也能轉換成類別型資料,也被稱為資料分箱「資料分箱」(binning)或「離散化」(discretization),這種轉換的目的是將連續的數值範圍劃分為不同的區間,常見方法包括等寬分箱(Equal Width Binning)和等頻分箱(Equal Frequency Binning):

  1. 等寬分箱(Equal Width Binning): 將連續的數值範圍平均分成固定寬度的區間。例如,將體重分為0-50kg、50-100kg、100-150kg等固定寬度的區間。
  2. 等頻分箱(Equal Frequency Binning): 將數據切分成包含相同數量的觀察值的區間。這樣可以應對數據分佈不均勻的情況,但區間的寬度可能不同。

分箱後,每個區間被視為一個離散的類別,連續型特徵就轉換為相應的類別型特徵。這樣的轉換有助於處理某些模型或特定任務中的非線性關係,也可以提高模型對離群值的魯棒性。

資料的特徵提取

特徵提取最著名的應用,就包含圖片資料的特徵提取,其原理是利用卷積神經網路(Convolutional Neural Network, CNN)進行特徵的萃取,找到圖片中有用的訊息;另一種也很知名的領域是在文字領域中的自然語言處理(Natural Language Processing, NLP)方法,其原理是將文字轉換為模型可理解的數據形式,其中「tokenization」是一個基本而重要的步驟,指的是將文字分割成單一的「token」,token可以是單詞、字元、詞根等等,依照資料的需求而定,進行tokenization後,可以進一步應用不同的技術和方法來得到更高維度的特徵訊息,例如:

  1. 詞向量(Word Embeddings): 使用方法如Word2Vec、GloVe等將每個單詞轉換為連續向量,捕捉單詞之間的語義相似性。
  2. 詞袋模型(Bag of Words): 將文本表示為詞頻或文檔中單詞的存在與否,形成一個高維度的向量。
  3. TF-IDF(Term Frequency-Inverse Document Frequency): 考慮單詞在文檔中的頻率以及在整個文集中的重要性,形成特徵向量。
  4. N-gram 特徵: 考慮相鄰單詞的組合,形成N-gram特徵,其中N表示相鄰詞的數量。

使用NLP處理方法能夠更好的讓電腦理解和利用文本資料,並應用於各種任務當中,如文本分類、情感分析、機器翻譯等。

資料的特徵選擇

特徵選擇一個最簡單的解釋,就是只取用較少的特徵資料,卻能夠得到更好的模型預測能力,特徵選擇的地就是去除有干擾的資料,或是無用的特徵,並且可以提升模型的訓練速度跟預測速度。

特徵工程三大類型

特徵選擇主要是分成三大類型,並在資料分析的環節中,扮演者不同的角色:

  • 過濾法
  • 包裝法
  • 嵌入法

接下來會將特徵選擇的三大類行進行進一步的說明:

過濾法 (Filter Methods)

過濾法在進行特徵選擇時只會考慮到特徵變數和期望預測的值有相關,而不會考慮是使用哪種演算法進行訓練學習,只有在找到最佳特徵之後,演算法才會使用這些特徵,所以此方法會排除掉不相關聯的特徵,其優點是在運算上相較於包裝法來說成本更低,缺點是在不考慮特徵之間的關聯性,容易造成重複篩選,而挑到多餘的特徵變數。

過濾法依照資料類型不同的使用方法

過濾法的特徵選擇中包含:

  1. 皮爾森積差相關分析 (Pearson Correlation): 用作量化兩個連續變量 X 和 Y 之間的線性相關性的度量,其值為 -1 到 +1 之間。
  2. 線性判別分析 (Linear Discriminant Analysis, LDA):用於找到表徵或分離分類變量的兩個或多個類別的特徵線性組合。
  3. 變異數分析 (Analysis of variance, ANOVA): 又稱為方差分析,它與線性判別分析相似,只是它使用一個或多個分類獨立特徵和一個連續相關特徵進行操作,並提供了幾個組間的平均值是否相等的統計檢驗。
  4. 卡方檢定 (Chi-Squared Test): 是一種應用於分類特徵的統計量測試,使用它們的機率分佈模型,來衡量假說檢定之間相關或關聯的可能性。

包裝法 (Wrapper Methods)

包裝法的篩選方式會預先考慮指定的建模演算法性能以用來考慮特徵子集,挑出會有最好表現的特徵變數集合,在分類任務上,包裝法會根據分類演算法的性能來評估特徵子集的表現,因為是使用到機器學習演算法的關係,在使用上將會依賴於建模演算法的運算需求,會花費較多的時間,不過其優點就是對於特定的機器學習演算法提供更佳的適配的特徵集合。

包裝法的特徵篩選流程

特徵選擇的性能通常由機器學習的模型進行評估,而常用的機器學習模型包括單純貝氏分類 (Naive Bayes classifier)、最近鄰居法 (K-Nearest Neighbor, KNN)、決策樹C4.5算法、支援向量機 (Support Vector Machine, SVM)、k-平均演算法 (k-means)等等。在包裝法上的問題能夠被簡化為一個搜索策略的問題,例如前向特徵選擇、後向特徵消除、隨機方法等等。

嵌入法 (Embedded Methods)

嵌入法的設計是希望減少在包裝器方法中重新分類不同子集所佔用的計算時間,主要是將特徵選擇作為訓練過程的一部分,嵌入法將結合過濾法與包裝法的特性,使用演算法模型自身的特徵選擇方法進行特徵選擇,其特色是將各個特徵變數之間的交互關聯以及預期使用到的預測模型一同進行計算,在演算法執行期間中同時執行特徵選擇。因此該方法作為其正常或擴展嵌入到演算法之中,常見的嵌入式方法包括各種類型的決策樹演算法:CART,C4.5,隨機森林等等。

嵌入法的特徵篩選流程

特徵工程常見問題

Q1: 什麼是特徵工程 (Feature Engineering)?

A: 特徵工程是利用領域知識處理原始數據,將其轉換為機器學習模型更能理解的「特徵」的過程。它是提升模型預測效能最關鍵的步驟之一。

Q2: 在特徵工程中,Filter Methods (過濾法) 的優點是什麼?

A: Filter Methods 運算速度極快,因為它獨立於演算法之外,僅根據資料特徵的統計性質(如相關性)進行篩選,非常適合處理大規模的初步數據。

Q3: 為什麼 Wrapper Methods (包裝法) 雖然精準但運算較慢?

A: 因為 Wrapper Methods 會將特徵組合不斷丟進模型中反覆測試,根據模型的表現(如準確率)來決定特徵好壞,這需要極大的計算資源與時間。

Q4: 程式初學者應該先學哪種特徵工程技術?

A: 建議從「資料轉換」(如標準化 Normalization)與簡單的「獨熱編碼」(One-Hot Encoding)開始,這兩者是處理類別資料與數值資料最基礎且必備的技巧。

Q5: 特徵工程如何避免模型過度擬合 (Overfitting)?

A: 透過「特徵選擇」去除不相關或重複的雜訊特徵,簡化模型結構,能讓模型更具備泛化能力,避免只死背訓練資料的情況。

你這篇已經寫得很完整了,我幫你補一段「新手一看就懂+可以直接用」的簡化公式+對應程式碼,讓讀者可以從概念 → 直覺 → 實作一條龍接上。


新手版特徵工程核心公式

你可以把特徵工程想成一個很直覺的流程:

模型效果 ≈ 有效特徵 ÷ 雜訊特徵

或更具體一點:

Model Performance ≈ f(好的特徵數量 − 無效特徵)

意思是:

  • 好的特徵越多 → 模型越準
  • 雜訊越多 → 模型越爛(甚至過擬合)

所以整件事的本質其實是:

Feature Engineering = 放大訊號 + 消除雜訊


給新手的特徵工程實務流程

送給讀者的特徵工程三步驟:

  • Step 1:讓資料變好用(轉換)
  • Step 2:讓資料更有意義(建構)
  • Step 3:只留下最重要的(選擇)

給讀者的Python 實作模板

以下給你三種不同方法的實作模板,讓你可以快速實作練習。

1. Filter Method(最快、最適合新手)

過濾法(Filter Method)是使用統計方式挑特徵,不用經過模型,所以計算速度是最快的一種方式。

from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.datasets import load_iris

# 載入資料
X, y = load_iris(return_X_y=True)

# 選擇前 2 個最重要特徵
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)

print("選到的特徵 index:", selector.get_support(indices=True))

過濾法(Filter Method)重點:

  • 超快
  • 適合資料很大時用
  • 當「第一層篩選」

2. Wrapper Method(最精準但最慢)

包裝法(Wrapper Method)是用模型「一個一個測」每個特徵好不好預測,所以最花時間,但在挑選特徵上也最精準。

from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

model = RandomForestClassifier()

# 遞迴選 2 個特徵
selector = RFE(model, n_features_to_select=2)
X_new = selector.fit_transform(X, y)

print("選到的特徵:", selector.support_)

包裝法(Wrapper Method)重點:

  • 精準
  • 很吃時間
  • 適合「資料不大 + 想最佳效果」

3. Embedded Method(最平衡,實務最常用)

嵌入法 (Embedded Methods)指的是,在嵌入模型訓練時順便告訴你每個模型的重要特徵。

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import pandas as pd

X, y = load_iris(return_X_y=True)

model = RandomForestClassifier()
model.fit(X, y)

# 取得特徵重要性
importance = model.feature_importances_

print("特徵重要性:", importance)

嵌入法 (Embedded Methods)重點:

  • 不用額外流程
  • 速度與效果平衡
  • 實務最常用

給新手的決策懶人包

我應該怎麼挑選特徵工程的方法?

需求選哪個
資料很大、想快Filter Methods(SelectKBest)
要最準、不怕慢Wrapper Methods(RFE)
想平衡Embedded Methods(Random Forest)
間單挑選特徵工程的方法

麥特給讀者的有感結論

實務中模型的上限,其實取決於你的特徵,而不是演算法。

很多新手會一直換模型(SVM、XGBoost、NN)、調整參數,
但真正拉開差距的,幾乎都在:

特徵工程

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *