跳轉到

ML 面試核心觀念

這是一份面試導向的觀念速查——把 DS/ML 面試最高頻的八個主題整理成「核心觀念 + 程式碼 + 面試口答」。與〈Géron《Hands-On ML》Ch1–9 重點整理〉互補:那篇照書走章節,這篇照觀念打面試。

0. 一眼地圖

ML 三大類型(在學什麼)→ Bias-Variance(怎麼判斷學壞了)→ 梯度下降(怎麼學)→ 線性/邏輯回歸(最基本的兩個模型)→ 正則化(怎麼不過擬合)→ 樹模型家族(業界 tabular 主力)→ 交叉驗證(怎麼公正評估)→ 評估指標(用什麼數字衡量)。


1. ML 三大類型

  • 監督式:資料有 label,學「輸入→輸出」映射。
  • 回歸(連續值,指標 MAE/MSE/RMSE/R²)、分類(類別,指標 Accuracy/P/R/F1/AUC)。
  • 非監督式:資料無 label,自己找模式。
  • 分群(K-Means/DBSCAN)、降維(PCA/t-SNE)、關聯規則(購物籃)。
  • 其他:半監督、自監督(BERT 的 masked LM)、強化學習(AlphaGo)。

🎤 面試口答

  • 監督 vs 非監督:差在有沒有 label。實務 ~80% 是監督;非監督多用於 label 很貴前的探索或異常檢測。
  • K-Means vs PCA:一個是分群(輸出「屬於哪群」)、一個是降維(輸出低維表示);常先 PCA 再 K-Means。
  • 應用場景:監督→金融違約預測;非監督→電商客戶分群。

2. Bias-Variance Tradeoff(最核心的判斷框架)

誤差分解:Total Error = Bias² + Variance + Irreducible Error - Bias 高 = 太簡單 = underfitting(如用線性回歸擬合非線性)。 - Variance 高 = 太複雜 = overfitting(如深度 20 的決策樹背住訓練集)。 - Irreducible:資料本身雜訊,換模型也減不掉。

Bias-Variance Tradeoff 曲線 圖:模型複雜度上升 → Bias² 降、Variance 升,總誤差呈 U 型,最低點即 sweet spot。

用 train/validation error 診斷:

Training Validation 診斷
高(接近 train) High Bias → Underfitting
高(差距大) High Variance → Overfitting
好模型

Learning curve:underfitting vs overfitting 圖:左 underfitting(train/val 都高且收斂在一起);右 overfitting(train 低、val 高、落差大)。

解法: - High Bias → 加複雜度、加特徵、降正則化、訓練更久。 - High Variance → 加資料(最有效最貴)、加正則化、簡化模型、CV 調參、Ensemble、Dropout、Early stopping。

🎤 面試口答

先看 train/val error 組合判斷:兩者都高=underfitting(加複雜度);train 低 val 高=overfitting(先試正則化,再考慮蒐集更多資料)。


3. Gradient Descent(訓練之魂)

一句話:站在哪、看哪個方向最陡下坡、踏一步、重複。更新公式 θ ← θ − α·∇L(θ)(α=learning rate,負號=往下坡)。

三種變形: - Batch:用全部資料算一次梯度,穩但慢。 - SGD:一筆就更新,快但震盪大。 - Mini-Batch(業界標準):一小批(32/64/128/256),能吃 GPU 平行、小震盪還能幫忙逃離 local minima。

Learning rate:太小→收斂超慢;太大→震盪甚至發散。常用起點 0.001/0.01,搭配 scheduler(先大後小)。

進階優化器:Momentum(慣性)、RMSProp(每參數自適應 lr)、Adam(=兩者結合,業界預設,99% NN 用它)。高維空間真正常見的不是 local minima 而是 saddle point。各優化器(Adagrad/RMSprop/Adam β₁β₂、SGD+Nesterov)深入見〈深度學習訓練基礎〉。

def gradient_descent(X, y, lr=0.01, epochs=1000):
    w, b, n = 0, 0, len(X)
    for _ in range(epochs):
        y_pred = w * X + b
        dw = (2/n) * np.sum((y_pred - y) * X)
        db = (2/n) * np.sum(y_pred - y)
        w -= lr * dw; b -= lr * db
    return w, b

🎤 面試口答

  • 為何往梯度反方向:梯度指向上升最快方向,要最小化 loss 就往反方向走。
  • Batch/Mini/SGD:Batch 穩慢、SGD 快震盪、Mini-batch 折衷且能用 GPU,業界標準。
  • 為何用 Adam:Momentum+RMSProp、自適應 lr、預設好用;但 SGD+Momentum+好 schedule 有時泛化更佳(進階)。

4. 線性回歸 vs 邏輯回歸

項目 線性回歸 邏輯回歸
任務 回歸 分類
輸出 連續值 機率 [0,1]
激活 Sigmoid / Softmax
損失 MSE Cross-Entropy
解析解 無(須迭代)
  • 線性回歸三假設:線性關係、樣本獨立、殘差常態 N(0,σ²)。
  • 邏輯回歸:先算線性組合 z,再用 Sigmoid σ(z)=1/(1+e⁻ᶻ) 壓到 [0,1];多元分類用 Softmax。decision boundary 是線性的(P=0.5 ⟺ w·x=0)。

🎤 面試口答

  • 為何叫「回歸」:核心仍是線性回歸 z=w·x,只是再過 Sigmoid 變機率。
  • 為何不能用 MSE:邏輯回歸配 MSE 損失非凸、易卡 local minima;Cross-Entropy 來自最大似然、曲面 convex、收斂有保證。
  • 是線性模型嗎:是,decision boundary 線性;非線性問題要用 kernel SVM 或樹模型。

5. 正則化(L1 / L2 / 其他)

在 loss 加懲罰:Loss = 原損失 + λ × 參數懲罰。 - L2 (Ridge) Σwᵢ²:參數均勻縮小、不歸零;預設首選、NN 的 weight decay。 - L1 (Lasso) Σ|wᵢ|:不重要參數直接歸零(自動特徵選擇);特徵多但少數重要時用。 - Elastic Net:L1+L2 折衷(l1_ratio),特徵數>樣本數時好用。

L1 與 L2 的幾何解釋 圖:L1(菱形)的最低損失等高線容易交在「角」上 → 某些權重歸零(稀疏);L2(圓)通常交在非軸點。 - λ(sklearn 的 alpha)用 CV 調:太小→過擬合、太大→欠擬合。注意 LogisticRegressionC=1/λ,方向相反。 - 其他正則化:Dropout(NN,隨機關神經元 0.2~0.5)、Early stopping、Data Augmentation。Dropout 訓練/推論差異與 BatchNorm 細節見〈深度學習訓練基礎〉。

🎤 面試口答

  • L1 vs L2 怎麼選:特徵多疑多數無用→L1(選特徵);特徵都有貢獻→L2;不確定→L2 或 Elastic Net。
  • L1 為何稀疏:幾何上 L1 可行域是菱形(角在軸上),與損失等高線最可能交在軸上 → 部分參數精確歸零。
  • 為何先標準化:否則 L2 對大尺度特徵懲罰更多,懲罰變成跟尺度相關而非重要性。

6. 樹模型家族:RF / XGBoost / LightGBM

單棵決策樹幾乎必過擬合、不穩定,實務只當 Ensemble 的零件。兩條路線:

  • Bagging(並行)→ Random Forest:許多樹各吃 bootstrap 子集 + 每節點隨機選特徵子集 → 投票/平均,降 Variance。不易過擬合、可平行、有 feature importance、預設就好用。關鍵參數 n_estimatorsmax_features(分類預設 √n、回歸 n/3)、max_depth
  • Boosting(串行)→ XGBoost / LightGBM / CatBoost:每棵新樹專修前面的錯誤,降 Bias
  • XGBoost:level-wise 生長、Kaggle 經典、需手動 encode 類別。
  • LightGBM(業界主力):leaf-wise 生長、比 XGBoost 快約 10×、原生支援類別變數;小資料(<10k)易過擬合。
  • CatBoost:類別變數處理最佳、預設就強。
  • 關鍵參數:max_depth/num_leaveslearning_rate(小→需更多樹)、n_estimatorsearly_stopping_rounds(必加)subsample/colsample_bytree(隨機性防過擬合)。

🎤 面試口答

  • Bagging vs Boosting:Bagging 並行降 Variance(RF);Boosting 串行修錯降 Bias(XGB/LGBM)。
  • RF 為何不易過擬合:兩層隨機(bootstrap 樣本 + 隨機特徵子集)→ 樹間相關性低,集成後 Variance 下降。
  • XGB vs LGBM:level-wise vs leaf-wise(每次分裂減損最多的葉);leaf-wise 通常更準更快,小資料易過擬合。實務先 LGBM 再 Optuna 調參。
  • 類別變數處理:One-hot / Label / Target Encoding;CatBoost 原生最佳。

7. Cross-Validation(交叉驗證)

單次切 train/test 受切分運氣影響大、小資料尤甚。K-Fold:切 K 份(常 5/10),輪流 1 份驗證其餘訓練,取平均。

變形: - Stratified K-Fold:保持每折類別比例 → 分類/imbalanced 首選。 - TimeSeriesSplit:時序不能用未來預測過去,只能過去→未來。 - Group K-Fold:同組(如同一病人多筆)須在同一折。 - LOO:K=N,成本高、少用。

⚠️ 最常見的 Data Leakage:在 CV 前就用全部資料做標準化/特徵選擇。正解是用 Pipeline 把前處理+模型包起來,讓每折各自 fit:

pipe = Pipeline([('scaler', StandardScaler()), ('model', LogisticRegression())])
scores = cross_val_score(pipe, X, y, cv=StratifiedKFold(5, shuffle=True, random_state=42))

🎤 面試口答

  • 為何用 CV / 用哪種:避免單次切分的運氣;最常 5-Fold,分類用 Stratified,時序用 TimeSeriesSplit。
  • Data Leakage:訓練不當用到驗證/測試資訊(典型:CV 前全量標準化);用 Pipeline 讓每折分開處理。
  • K 選多少:5 或 10;資料少 K 設大(如 1000 筆用 10-Fold)。
  • 選超參數+評估別用同一份:用 train/val/test 三切或 nested CV。

8. 評估指標全整理

分類:從混淆矩陣出發

TP/TN 對;FP=誤報、FN=漏報。 - Accuracy (TP+TN)/All:imbalanced 有陷阱(全猜多數類也高分)。 - Precision TP/(TP+FP):「我說是正的有多少真的是」→ 誤報成本高用(垃圾郵件)。 - Recall TP/(TP+FN):「真正的正抓到多少」→ 漏報成本高用(癌症篩檢)。 - F1 = P/R 調和平均(兩個都高才高)→ imbalanced 首選。 - ROC-AUC:排序能力、與 threshold 無關(0.5 亂猜、1.0 完美)→ imbalanced 評估最常用。

情境 指標
平衡資料 Accuracy
不平衡 F1、AUC
漏報成本高(診斷/詐騙) Recall
誤報成本高(垃圾郵件/推薦) Precision
排名/機率 AUC

回歸

  • MAE:絕對誤差、對 outlier 不敏感。
  • MSE:平方誤差、重罰 outlier、常當訓練損失。
  • RMSE:MSE 開根號、單位同 y、報告最常用。
  • :解釋多少 % 變異(≤1,可負)。
  • MAPE:百分比誤差、業務友善,但 y 有 0 會爆。
from sklearn.metrics import classification_report, roc_auc_score
print(classification_report(y_true, y_pred))
auc = roc_auc_score(y_true, y_pred_proba)   # 注意要用機率

🎤 面試口答

  • P vs R:誤報貴用 Precision、漏報貴用 Recall、都重要看 F1。
  • imbalanced 不能用 Accuracy:99% 健康全猜健康也 99%;看 F1/AUC 才露出沒學到少數類。
  • AUC vs Accuracy:AUC 是排序能力、與 threshold 無關;Accuracy 隨 threshold 變動。開發看 AUC,部署再依情境定 threshold。
  • 口訣:Accuracy 看全局、Precision 看抓得準、Recall 看抓得全、F1 調和、AUC 看排序。