SVM 面试题总结

张开发
2026/4/11 12:33:03 15 分钟阅读

分享文章

SVM 面试题总结
一、SVM 的缺点1. 难以适应超大规模数据集算力与内存瓶颈这是 SVM 在大数据时代面临的最大痛点。内存消耗大SVM 的求解依赖于二次规划问题。如果使用非线性核算法需要计算并存储一个大小为 $N \times N$ 的核矩阵Gram 矩阵N 为样本个数。当数据量达到百万级别时这个矩阵会撑爆绝大多数计算机的内存。训练时间长求解这个矩阵的计算复杂度通常介于 $O(N^2)$ 到 $O(N^3)$ 之间。当数据量激增时SVM 的训练时间会呈指数级上升。工程平替在面对如垃圾邮件检测、广告点击率预测等海量数据任务时工业界往往会放弃 SVM转而使用训练极其高效的朴素贝叶斯、逻辑回归Logistic Regression或基于梯度的深度神经网络。2. 对核心参数和核函数的选择极度敏感SVM 性能的优劣几乎完全取决于核函数Kernel的选择以及超参数的设定如软间隔惩罚参数 C、RBF 核的 $\gamma$ 值。缺乏通用指导标准目前并没有一套完美的理论方法来指导对于特定数据集究竟该用哪种核函数。严重依赖经验与算力参数的选取带有很大的随意性通常只能依靠人工经验或者结合交叉验证Cross Validation进行极其耗时的网格搜索Grid Search。这就导致 SVM 的调参过程往往变成了一门“玄学”和体力活。3. 解决多分类问题存在天然壁垒底层基因限制经典的 SVM 从数学建模的最初始阶段寻找分隔超平面就是专门为二分类问题$y \in \{-1, 1\}$量身定制的。组合方案的妥协要在实际应用中解决多分类问题必须强行拼凑多个二分类器如我们之前探讨过的 OvO、OvR、DAG-SVM 决策树。这些组合模式要么会引发极其庞大的计算开销如 OvO要么会面临正负样本极度不平衡和分类精度下降的风险如 OvR。相比之下决策树或神经网络则具备天然的多分类输出能力。4. 对缺失数据极度敏感距离度量失效SVM 的核心机制无论是最大化几何间隔还是利用核函数映射高维空间都极度依赖于数据点之间的空间距离或内积计算。只要样本中存在缺失的特征维度两个向量之间的内积就无法正常计算这会导致该样本根本无法参与超平面的构建。因此在使用 SVM 前必须对数据进行非常严密的缺失值填补和预处理。5. 模型可解释性较差“黑盒”效应当使用线性 SVM 时我们还能通过法向量 $\beta$ 的权重大小来解释哪个特征更重要。但是一旦引入了强大的非线性核函数如 RBF 径向基核数据被映射到了不可见的无限维特征空间中。此时最终的决策边界变得极其复杂人类完全无法直观理解模型到底是基于什么逻辑做出的判断。在医疗诊断、金融风控等对模型可解释性要求极高的领域这是一个巨大的劣势。6. 无法直接输出严格的概率值在实际业务中我们往往不仅需要知道一个样本“属于哪一类”还需要知道“属于这一类的概率是多少”比如 90% 的概率是恶性肿瘤。逻辑回归Logistic Regression可以天然输出 [0, 1] 之间的标准概率。而 SVM 的输出 $f(x) \beta^T x b$ 只是一个代表几何距离的置信度分数可以是 5.2也可以是 -3.8并不是概率。虽然可以通过 Platt Scaling 等后处理技术将其强行映射为概率但这又会额外增加计算成本且准确性受限。二、如何选择核函数一句话实践中通常优先选择 RBF 核函数在实际的机器学习工程中选择哪种核函数以及是否使用 SVM通常取决于特征的数量设为 n与训练样本的数量设为 m之间的相对关系。1. 核心决策树吴恩达经验法则场景 A特征维度 n 很大甚至和样本量 m 差不多例如 $n10000$, $m10 \sim 1000$典型应用文本分类问题、基因序列分析。最佳选择线性核 (Linear Kernel)或 逻辑回归 (Logistic Regression)。背后逻辑当特征维度已经极高时数据在原始空间中大概率已经是线性可分的了。此时如果再强行使用非线性核映射到更高维的空间不仅毫无必要反而会带来极高的过拟合Overfitting风险。线性核训练速度极快且不需要调参除了 C是高维稀疏数据的首选。场景 B特征维度 n 较小样本量 m 大小适中例如 $n1 \sim 1000$, $m10 \sim 10000$典型应用常规的表格类数据、中小规模的非线性分类。最佳选择高斯核 (RBF Kernel)。背后逻辑特征少意味着数据在低维空间很可能线性不可分。由于样本量 m 适中计算 $m \times m$ 的核矩阵Gram 矩阵的内存和时间开销完全在计算机的承受范围内。此时利用 RBF 核“映射到无穷维”的超能力可以拟合出极其完美的非线性决策边界。场景 C特征维度 n 较小但样本量 m 极其巨大例如 $n1 \sim 1000$, $m 50000$典型应用海量用户行为预测、大型工业数据集。最佳选择人工特征工程 线性核/逻辑回归。背后逻辑如果强行对海量样本使用 RBF 核由于需要计算 $O(m^2)$ 甚至 $O(m^3)$ 复杂度的二次规划问题训练时间将极其漫长甚至直接内存溢出这正是前一节提到的 SVM 的致命缺点。聪明的做法是工程师手动组合一些非线性特征如添加特征的平方、交叉项人为提升特征维度然后退回到场景 A使用速度极快的线性分类器。2. 核函数的内部鄙视链为什么总是 RBF如果我们决定要使用非线性核为什么大家几乎一致推荐 RBF 核而很少使用多项式核或 Sigmoid 核线性核的降维打击线性核其实是高斯核的一种特例在某些极限参数下RBF 的表现与线性核非常相似。多项式核的参数灾难多项式核不仅超参数多需要调阶数 d、常数项、系数而且它的函数值域不稳定。当特征值较大或阶数 d 较高时内积结果很容易呈指数级爆炸走向无穷大反之则可能衰减到无穷小。RBF 核的绝对稳定性RBF 核计算的是指数衰减距离它的结果永远被极其稳定地死死限制在 (0, 1] 的区间内。这使得它在任何数据尺度下都不会出现数值溢出表现极其稳健。Sigmoid 核的理论缺陷如前所述Sigmoid 核在很多参数组合下根本不满足 Mercer 定理连有效的核函数都算不上。3. 工程调参的代价线性核几乎“开箱即用”训练速度飞快顶多用交叉验证选一下容错率 C。高斯核 (RBF)必须进行极其严格的交叉验证Cross Validation和网格搜索寻找最佳的惩罚参数 C 和影响半径 $\gamma$。如果参数没调好RBF 核的效果可能还不如线性核。所以享受无穷维魔法的前提是付出大量调参的算力时间。三、样本失衡对 SVM 的影响1. 什么是样本失衡 (Class Imbalance)定义在分类任务中不同类别的训练样本数量相差极其悬殊。直观例子信用卡欺诈检测100,000 笔正常交易多数类 / Majority Class只有 10 笔是盗刷少数类 / Minority Class。比例 10000:1。罕见病诊断999 个健康人1 个患病者。比例 999:1。工业缺陷检测流水线上绝大多数零件都是合格的只有极少数有瑕疵。2. 样本失衡对 SVM 分类结果的致命影响回顾我们推导出的 SVC 软间隔目标函数$$\min_{\beta, b, \epsilon} \frac{1}{2}\|\beta\|^2 C \sum_{i1}^N \epsilon_i$$请盯住公式后面的惩罚项$C \sum_{i1}^N \epsilon_i$我们要最小化所有样本的松弛变量之和。当样本严重失衡比如负样本 990 个正样本 10 个时会发生以下极其可怕的现象超平面被“推”向少数类边界偏移由于负样本有 990 个如果超平面稍微偏向负样本可能会导致几百个负样本产生一点点误差 $\epsilon_i$累加起来的总惩罚极其庞大为了最小化总损失SVM 算法会变得非常“功利”。它宁愿把那 10 个正样本全部牺牲掉让这 10 个正样本产生很大的 $\epsilon_i$以此换取 990 个负样本的绝对安全。分类超平面会严重向少数类偏移甚至直接把所有样本判定为多数类。支持向量比例失衡多数类由于基数庞大在边界附近的支持向量绝对数量也会远超少数类导致多数类在决定超平面位置时拥有了压倒性的话语权。 SVM 的解法代价敏感学习 / Cost-Sensitive Learning既然问题出在大家都用同一个惩罚权重 C我们在工程上通常会给不同类别分配不同的惩罚权重在代码中通常是class_weightbalanced参数多数类正常交易权重设置很小如 C_- 1。少数类欺诈交易权重设置极大如 C_ 1000。告诉模型“错杀一个负样本罚 1 块钱但放过一个正样本罚 1000 块钱”这样超平面就会乖乖地移回正确的位置。3. 样本失衡时如何评价分类器的好坏在样本失衡的情况下“准确率 (Accuracy)” 是最大的谎言试想罕见病诊断999健康1患病。如果一个庸医分类器完全不看病对所有人都直接宣布“没病”他的准确率高达 $\frac{999}{1000} 99.9\%$但这个模型是完全失效的因为它把唯一那个真正的病人漏掉了。因此我们需要引入以下更科学的评价指标。首先有以下四个指标定义TP (True Positive)真实的少数类被正确抓出来了。FN (False Negative)真实的少数类被错当成多数类漏掉了代价极其高昂。FP (False Positive)真实的多数类被误判为少数类。TN (True Negative)真实的多数类被正确识别。3.1. 精确率 (Precision / 查准率)$$P \frac{TP}{TP FP}$$含义在模型挑出来的所有“嫌疑人”中有多少是真的坏人应用当你希望“抓出来的必须得是准的不要冤枉好人”时看重此指标。如发垃圾邮件拦截千万别把重要邮件当垃圾拦截了。3.2. 召回率 (Recall / 查全率 / 敏感度 Sensitivity)$$R \frac{TP}{TP FN}$$含义在所有“真正的坏人”中模型成功抓出了多少个应用失衡数据中最看重的指标当你希望“宁可错杀一千绝不放过一个”时极度看重此指标。如癌症筛查、地震预警、欺诈检测。把没病的人误判为有病大不了多做一次复查(FP)但把有病的人判为没病(FN)代价是生命。3.3. F1 分数 (F1-Score)$$F1 2 \times \frac{Precision \times Recall}{Precision Recall}$$含义精确率和召回率是一对矛盾体抓得越严漏得越多抓得越松冤枉得越多。F1 分数是两者的调和平均数只有当 Precision 和 Recall 都很高时F1 才会高。它是评估不平衡数据集综合性能的黄金指标。3.4. ROC 曲线与 AUC (Area Under Curve)ROC 曲线是不受样本比例影响的抗造指标。无论正负样本比例怎么变化ROC 曲线的形状基本保持不变。AUC 值ROC 曲线下的面积取值在 0.5 到 1 之间。AUC 越接近 1模型区分正负样本的能力越强。ROC 曲线的全称是接收者操作特征曲线 (Receiver Operating Characteristic Curve)。1. 坐标轴的含义警察抓小偷的隐喻ROC 曲线的坐标轴上是两个相互博弈的指标纵轴 (Y轴) TPR (True Positive Rate查全率/真正率)公式TP / (TP FN)白话在所有真正的小偷中警察成功抓住了多少个越大越好横轴 (X轴) FPR (False Positive Rate误杀率/假正率)公式FP / (FP TN)白话在所有真正的良民中警察冤枉了多少个越小越好2. 曲线是怎么画出来的阈值的滑动任何一个分类器比如逻辑回归或支持向量机最终输出的往往不是绝对的类别而是一个概率值或置信度比如“有 80% 的概率是小偷”。默认情况下我们以0.5作为阈值大于 0.5 就抓。但在现实中你可以改变这个阈值极度严苛阈值设为 0.99警察只抓那些脸上写着“我是小偷”的人。结果一个好人也不会被冤枉FPR 极低接近 0但会漏掉绝大部分狡猾的小偷TPR 极低。这对应 ROC 曲线左下角的点 (0,0)。极度宁滥勿缺阈值设为 0.01警察把街上的人全抓了。结果所有小偷都被抓住了TPR 100%但也把所有好人都冤枉了FPR 100%。这对应 ROC 曲线右上角的点 (1,1)。ROC 曲线就是把阈值从 1.0 慢慢滑动到 0.0 时FPR, TPR这两个数值在图上描绘出来的轨迹3. AUC (Area Under Curve) —— 模型的终极成绩单既然 ROC 是一条曲线我们怎么直观地比较两个模型谁更厉害呢答案是计算曲线下的面积AUC。AUC 1.0完美模型曲线紧贴左上角。这意味着模型能在冤枉 0 个好人的情况下抓住 100% 的小偷。AUC 0.5瞎猜模型图中的那条对角虚线。跟抛硬币没区别抓对一个人的代价是必定冤枉一个人。常规好模型AUC 通常在 0.7 到 0.9 之间。4. 为什么样本失衡时大家最爱 ROC这是一个极其伟大的数学设计你看 TPR 和 FPR 的计算公式TPR 只在正样本小偷内部计算比例。FPR 只在负样本良民内部计算比例。因为它们各算各的所以无论街上是 10 个小偷配 10 个良民还是 10 个小偷配 10000 个良民ROC 曲线的形状几乎完全不会变形它剥离了“样本比例”这层伪装极其纯粹地衡量了模型“把正样本排在负样本前面”的绝对排序能力。这就是为什么在风控、医疗等严重失衡的领域AUC 是永远的神。

更多文章