詳細說明 Step 2 的標準化(Standardization),為什麼要做、怎麼做、怎麼理解每一行程式碼,並補充注意事項。
🧼 Step 2:資料標準化(Zero-mean, Unit-std)
📌 什麼是標準化?
標準化(standardization)是把每一個特徵資料轉換為:
-
平均值為 0(Zero-mean)
-
標準差為 1(Unit-variance)
這樣每個欄位會落在「均值為 0,且數值分佈一致」的範圍內,有利於:
-
提升 模型收斂速度與準確率
-
避免某些欄位因數值較大而主導訓練(尤其是用到距離計算時,如 SVM、KNN、MLP)
✅ 原始資料長什麼樣?
假設你有以下 NumPy 陣列 X
(每列是一筆資料,每欄是一個特徵):
特徵 1(第 0 欄)平均值是 2.0,特徵 2 平均值是 223.3,單位尺度不同,這會影響模型效果。
🧠 使用 StandardScaler
的完整解釋:
🔹 scaler
是一個物件,裡面會記錄每一欄的 mean(均值)與 std(標準差)。
這行做了兩件事(非常重要!):
動作 | 說明 |
---|---|
fit(X) | 計算 X 中每個欄位的平均值與標準差,記錄在 scaler.mean_ 和 scaler.scale_ 裡 |
transform(X) | 根據上面的平均值與標準差,轉換每筆資料的每一欄為 (x - mean) / std |
例如:
✅ 轉換後的資料長這樣:
⚠️ 為什麼 只對訓練資料做 fit?
這是機器學習常犯的錯誤之一!
否則會產生「數據外洩(data leakage)」導致模型看到了未來資訊。
✅ 額外說明:你也可以反轉標準化
這樣可以把標準化後的資料轉回原來的數值,用於「還原預測值」或「視覺化解釋模型輸出」。
🧾 小結:
項目 | 說明 |
---|---|
工具 | sklearn.preprocessing.StandardScaler |
方法 | .fit() 記錄 mean/std,.transform() 套用標準化 |
公式 | (x - mean) / std |
重要性 | 加快收斂、改善模型表現,尤其是神經網路與 SVM 等演算法 |
注意 | 測試資料只能用「訓練資料的 mean/std」來轉換(不能自己 fit) |
沒有留言:
張貼留言