L233 機器學習建模與參數調校
完成後你能:寫出 Precision、Recall 與 F1 的公式(Recall 以官方勘誤為準),依資料狀況選交叉驗證方法,分辨 L1 與 L2 正則化、Dropout 與早期停止,並比較 Grid Search 與 Random Search。
這個單元約 20 分鐘:讀重點,練 2 題,再用 3 題沒做過的題目驗證。
- 讀重點
下方的白話重點與例子 - 練 2 題
- 驗證 3 題
步驟 1・讀重點
先看懂這些
[官方勘誤] Recall 公式
錯誤:Recall = TP ÷ (TP + FP)
正確:Recall = TP ÷ (TP + FN)
L23303 模型訓練、評估與驗證
| 指標 | 公式 | 意義 |
|---|---|---|
| Precision | TP ÷ (TP + FP) | 預測為正的裡面,真的是正的比例 |
| Recall | TP ÷ (TP + FN) | 真的是正的裡面,被找到的比例 |
| F1 | 2 × P × R ÷ (P + R) | 兩者的調和平均,任一個低 F1 就低 |
| MSE | Σ(yᵢ − ŷᵢ)² ÷ n | 迴歸預測誤差平方的平均 |
- 例:Precision 0.8、Recall 0.6,F1 = 2 × 0.8 × 0.6 ÷ 1.4 ≈ 0.686
- 類別不平衡時不要只看準確率:確診只有 3%,全部猜沒確診也有 97% 準確率
- 交叉驗證怎麼選:一般用 K-Fold,類別不平衡用分層(Stratified),資料很少用留一法,時間序列用時間序列交叉驗證或滑動視窗,不能打亂時間順序
- 殘差圖出現系統性的彎曲:有非線性關係或異常值,違反線性迴歸的假設
L23304 模型調整與優化
| 方法 | 怎麼抑制過擬合 |
|---|---|
| L1 正則化(Lasso) | 把部分係數壓到 0,同時做特徵選擇 |
| L2 正則化(Ridge) | 讓係數變小,通常不會變成 0 |
| Dropout | 訓練時隨機把部分神經元的輸出設為 0 |
| 早期停止 | 監控驗證損失,連續幾輪(耐心值)沒有改善才停 |
- Grid Search 窮舉所有組合,Random Search 隨機抽樣,超參數多的時候 Random Search 比較有效率
- 增加特徵是擴充模型能力,不是防止過擬合的方法
- AutoML 適合缺少專職工程師、要在短時間內比較多種模型的情境
L23301 數據準備與 L23302 模型架構
- KNN、SVM 這類距離型模型,一定要先做特徵縮放
- 交互特徵:把兩個特徵相乘或組合成新特徵
pipe = make_pipeline(StandardScaler(), LogisticRegression())
pipe.fit(X_train, y_train) # 前處理加訓練
scores = cross_val_score(model, X, y, cv=5)
print(scores.mean()) # 每一折的分數取平均
考試陷阱
- Recall 是 TP ÷ (TP + FN),學習指引原版寫成 TP ÷ (TP + FP) 是錯的
- cross_val_score 回傳每一折的分數,要再取 .mean() 才是平均
- 多類別問題的 scoring 要用 f1_macro 或 f1_weighted,直接寫 f1 是二元分類的用法
- PCA() 沒有指定 n_components 會保留全部主成分,轉過去再轉回來,雜訊沒有減少