面试季整理的一份「能讲清楚、不是背八股」的机器学习题单。我的经验是:面试官不在乎你背得出公式,而在乎你能不能讲清「为什么用这个、什么时候会翻车、翻车了怎么救」。下面每道题我都按这个逻辑拆。

一、线性回归:从损失函数到闭式解

常问:推导线性回归的参数解。

核心是最小化 MSE 损失 $J(w)=\frac{1}{2n}|Xw-y|^2$。对 $w$ 求导并令为 0:

$$\nabla_w J = \frac{1}{n}X^T(Xw-y)=0 ;\Rightarrow; w^*=(X^TX)^{-1}X^Ty$$

这就是正规方程。第一个坑点:当特征存在多重共线性时 $X^TX$ 不可逆,解会爆炸——这正是 L2 正则(岭回归)的动机,$w^*=(X^TX+\lambda I)^{-1}X^Ty$,$\lambda I$ 保证可逆。我在「不平衡数据集与准确率陷阱」那篇里也提到过,正则化本质是给优化问题加先验。

为什么用 MSE 而不是 MAE:MSE 处处可导、有闭式解;MAE 在 0 处不可导,得用梯度下降。这是工程取舍,不是玄学。

二、逻辑回归:为什么是交叉熵

常问:逻辑回归损失函数为什么是交叉熵,而不是用 MSE?

如果套 MSE 到 sigmoid 输出上,梯度会出现 $\sigma’(z)$ 项,在两端饱和时梯度趋近 0,学习停滞。而交叉熵 $\mathcal{L}=-[y\log\hat y+(1-y)\log(1-\hat y)]$ 配合 sigmoid,梯度化简后就是 $(\hat y-y)x$,误差越大梯度越大,没有饱和死区。这是「输出层激活 + 损失函数要配对」的典型例子。

我当时踩过的实际坑:自己手搓二分类时,标签用了 0/1 但输出没截断,出现 $\log(0)$ 直接 NaN——所以实现里一定要给 $\hat y$ 做 clip(1e-7, 1-1e-7)。

三、SVM:最大化间隔与核技巧

常问:SVM 为什么用 hinge loss、核技巧在干嘛。

hinge loss $\max(0,1-y_i f(x_i))$ 只关心「有没有分对且间隔够大」,比 0-1 损失可微、比平方损失更鲁棒。核技巧本质是把低维不可分数据映射到高维再线性可分,用核函数 $K(x_i,x_j)=\phi(x_i)^T\phi(x_j)$ 绕过显式高维计算(避免维度灾难)。

一句话记忆:SVM 适合小样本高维(文本分类),大数据量下不如梯度提升树好调。

四、树模型:GBDT 与 XGBoost 的区别

这是必考题,记住三个层次:

  1. GBDT 用负梯度做残差近似,基学习器只能是 CART,每棵树的叶子权重靠线搜索。
  2. XGBoost 在 GBDT 基础上加:二阶泰勒展开(用 hessian)、正则项(叶子数+权重)、列采样、缺失值自动分裂方向、并行找分裂点。
  3. LightGBM 再用直方图算法 + 单边梯度采样把训练提速一个量级。

我实际项目里用 XGBoost 做信用评分,调参上最重要的不是 max_depth 而是 min_child_weight 和 subsample——过拟合几乎都从「叶子太纯」来。

五、通用陷阱题(几乎必问)

  • 偏差-方差权衡:模型简单→高偏差欠拟合;复杂→高方差过拟合。正则化、集成(bagging 降方差、boosting 降偏差)是两条主线。
  • 特征缩放:梯度下降类(LR、NN、SVM)必须做;树模型不需要。
  • 类别不平衡:别只看准确率,看 PR 曲线和 F1;采样(SMOTE/欠采样)或调 class_weight。

结语:怎么准备

我自己的方法:每道题先能口述「为什么」,再能写下推导,最后能举一个自己项目里的真实翻车例子。八股背得再熟,也比不过一句「我线上遇到过 XX,于是做了 YY」。这比任何题单都管用。