想象你办了一场乒乓球大赛,请来一位极其严格的裁判。这位裁判身怀绝技,但他有个致命短板——只擅长裁决「红方对蓝方」的比赛,每次给出一个干脆的答案:不是赢,就是输。这位裁判,就是 SVM(支持向量机)。问题来了:现实世界的分类赛场上,选手何止两位?垃圾邮件、营销邮件、正常邮件是三类;手写数字 0 到 9 是十类;新闻话题更是几十类。让一个只会「二选一」的裁判主持全场,你必须设计一套聪明的赛制,把这位单挑高手的实力发挥到极致。人类竞赛史恰好给出了参考答案:轮流当擂主的「一对多」挑战赛、每两人必碰面的「一对一」大循环赛、输一场就出局的「DAG」晋级淘汰赛。三种赛制各有权衡,而你的工作,就是为手头的分类任务挑选最合适的赛制,并理解这位裁判在不同赛制下的胜负手。

岗位关联

掌握 SVM 多分类策略,是你在真实项目中跨越「二分类算法」与「多类别业务」之间鸿沟的关键一步。这也是算法工程师面试中最高频的知识点之一——理解 OVO、OVR、DAG 的权衡,比背公式更能体现功力。

目录
  1. 可视化演示
  2. 二分类局限:只会「二选一」的裁判
  3. OVR一对多:擂主挑战赛
  4. OVO一对一:全员大循环
  5. DAG图方法:输一场就出局
  6. 策略对比分析:大赛的经费与公平
  7. 工程实战选型:怎样挑赛制
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

一对多 OVR (One-vs-Rest) 新样本 x max(score) → 类别 A OVR: K个分类器,每个区分1类vs其余K-1类,预测取最大决策值 SVM多分类策略可视化:展示OVR一对多、OVO一对一、DAG有向无环图、复杂度对比、ECOC编码及工程选择指南。

二分类局限:只会「二选一」的裁判

你请来的这位乒乓球裁判,评判规则其实很朴素:他站在球场中间画一条分界线(我们叫它超平面),然后根据球落在线的哪一侧,干脆利落地报出「红方胜」或「蓝方胜」。他没有中间的含糊地带,也不会说「这次红方胜率 62%」——他只会吼出 +1 或 -1 两个结果。这就是二分类 SVM 的本质:一个能力极强、但只会做判断题的裁判。

技术上的表达是:SVM 学习一个决策函数,把输入样本投影成一个数值,再用符号函数 sign 把它压成两个阵营。数值为正,判为 +1 类;数值为负,判为 -1 类。这个简洁的设计让 SVM 在小样本、高维场景下表现出色,但也注定了它天然无法直接回答「A、B、C、D 四选一」的问题——因为一个符号函数最多只有两个输出值。

要处理多分类,唯一的思路是「化整为零」:把这个只会二选一的裁判,嵌入到一套更大的赛制中,让他打多场比赛,最后由赛制规则汇总出冠军。接下来的三种方法,正是三套为这位「判断题裁判」量身定制的竞赛规程。

这就说清楚了:我们的裁判能力没问题,但比赛规则只有「单挑」。要让他在四强赛、十强大赛中立功,我们得给他设计更有想象力的赛制——这正是接下来三节的主题。

f(x)=sign(w⋅x+b)\displaystyle f(x) = \text{sign}(w \cdot x + b)
这是 SVM 的核心决策函数:输入样本 x,经过权重 w 打分,再用 sign 符号函数给出 +1 或 -1 的最终裁决。
  1. 线性打分先用 $w \cdot x + b$ 计算一个实数分数。它衡量的是「样本 x 处于分界线的哪一侧、有多远」
    w⋅x+b\displaystyle w \cdot x + b
  2. 符号化裁决sign 把正数映射成 +1,负数映射成 −1。这不是一个「温柔」的过程,而是直接给出二选一的硬答案
    sign(z)={+1z>0−1z<0\displaystyle \text{sign}(z) = \begin{cases} +1 & z > 0 \\ -1 & z < 0 \end{cases}
  3. 二值输出困境因为输出只有两种取值,所以一个 SVM 天然只能区分两个类别。要区分 N 类,必须借助外在的策略框架
    输出∈{+1,−1}\displaystyle \text{输出} \in \{+1, -1\}

OVR一对多:擂主挑战赛

最简单的赛制是「擂主挑战赛」:四位选手轮流坐庄当擂主,每位擂主必须迎战「除自己以外的所有选手」组成的联队。比如 A 当擂主时,B、C、D 三人被临时宣布为同一个阵营「非 A」。裁判只需判断:A 比「非 A」联队强,还是弱?四轮下来,每位选手都得到一张「对手联队」的成绩单,最后选出表现最强势的那位当冠军。

这个赛制在机器学习里叫「一对多」(One-vs-Rest,简称 OVR)。具体做法是:对每一类 $i$,训练一个二分类器 $f_i$,把第 $i$ 类的样本标为正样本,其余所有类的样本统一标为负样本。预测时,把样本分别送入这 N 个裁判,每个裁判给出一个「该样本像我这边吗」的决策分,最终取分数最高的那个类别作为答案。

OVR 的优点显而易见:只需要训练 N 个分类器,类别再多也只需线性增加,训练效率高。但它的隐患也很像真实擂台赛——擂主一个人面对拼凑起来的「杂牌联队」,联队内部成员五花八门,裁判的「强弱判断」很可能被联队里人数最多、特征最杂的那一团样本带偏。这就是著名的「样本不均衡」问题:正类只有一类样本,负类却是其余所有类样本的混合体,比例经常严重失衡。

回想擂台赛的画面:OVR 的思路是「以一对多、取最强」。它简单直白、成本低,但因为联队内部的「内耗」,每个裁判的判决质量都可能打折扣。更公平的赛制,需要我们让裁判回归他最擅长的场景——两人对决。

y^=arg⁡max⁡i∈{1,2,…,N}fi(x)\displaystyle \hat{y} = \arg\max_{i \in \{1, 2, \dots, N\}} f_i(x)
预测时,我们不直接看 SVM 输出的 ±1,而是比较 N 个分类器的原始决策分数,谁的分数最高,谁当选冠军。
  1. N 位擂主为每个类别 $i$ 训练一个二分类器 $f_i$,相当于安排了 N 位轮流坐庄的擂主
    f1,f2,…,fN\displaystyle f_1, f_2, \dots, f_N
  2. 逐个打分新的样本 x 分别接受 N 位裁判的检验,每个裁判输出一个不带符号的原始分数,代表「你像不像我的阵营」
    fi(x)∈R\displaystyle f_i(x) \in \mathbb{R}
  3. 取最大值用 $\arg\max$ 找出分数最高的下标 $\hat{y}$,它就是这场擂台赛的最终冠军
    y^=arg⁡max⁡ifi(x)\displaystyle \hat{y} = \arg\max_{i} f_i(x)

OVO一对一:全员大循环

既然这位裁判最擅长「单挑」,不如就让他打遍所有组合:A 对 B、A 对 C、A 对 D、B 对 C……每一对选手单独安排一场比赛,最后按每位选手的胜场数颁奖。这就是「一对一」(One-vs-One,简称 OVO),也是学术界和工业界公认最稳的 SVM 多分类赛制。

OVO 的工程实现很直观:类别数是 N,两两配对的组合数就是 $C_N^2$,即 $N(N-1)/2$ 个二分类器。预测时,每个分类器对样本 x 投出自己的一票——它认定 x 属于这对组合中的哪一方,谁就赢得这一票。最终统计得票数,票数最高的类别获胜。因为每个裁判面对的永远是「两个原始类别的纯净样本」,不存在 OVR 那种「把一堆类揉成一团」的偏差,所以投票结果通常更可靠。

代价也显而易见:分类器数量从 N 个暴涨到 $N(N-1)/2$ 个。类别数 N=10 时,OVR 只需 10 个裁判,OVO 却要 45 个裁判;N=100 时,OVO 要 4950 个裁判。训练和存储的开销呈平方级增长。此外,投票也会出现平票的尴尬局面:比如三分类时,A、B、C 各自赢了一场,没有人胜出。实践中常用「原始决策分数之和」作为平票时的破局手段——不是简单数票,而是比较每类赢下的那些对局里分数加成总和。

大循环赛制最公平,但场次太多。于是有人想:能不能保留 OVO「纯净两两对决」的优点,又让推理阶段少打几场?DAG 图方法给出了一个优雅的答案。

CN2=N(N−1)2\displaystyle C_N^2 = \frac{N(N-1)}{2}
这是 OVO 的分类器总数公式:从 N 个类别中任选两个进行组合,组合数即为需要训练的裁判数量。
  1. 组合计数从 N 个元素中无序地选取 2 个元素,方案数记作组合数 $C_N^2$
    (N2)\displaystyle \binom{N}{2}
  2. 展开公式组合数展开后得到 $\frac{N(N-1)}{2}$。分母的 2 表示「A 对 B」和「B 对 A」是同一种对决,不重复计数
    N(N−1)2\displaystyle \frac{N(N-1)}{2}
  3. 平方增长当 N 较大时,分类器数量随 $N^2$ 增长,这决定了 OVO 在类别规模大时会付出比 OVR 高得多的训练与存储成本
    O(N2)\displaystyle O(N^2)

DAG图方法:输一场就出局

如果把大循环赛改造成「单败淘汰赛」:第一轮 A 对 B、C 对 D,赢家进入第二轮,第二轮赢家再对决,最终决出冠军——整个过程只需要三场比赛,而不是六场。这就是「有向无环图」(Directed Acyclic Graph,DAG)多分类的精髓:训练阶段依旧像 OVO 一样,为每一对类别训练一个裁判;但推理阶段不搞全员投票,而是从一棵树的根节点出发,沿着一条路径逐层下探,每过一关就淘汰一个类别,最终到达叶子节点就是冠军。

DAG 的节点就是那些 $N(N-1)/2$ 个二分类器,但推理时只沿着一条「根到叶」的路径行走。总路径长度为 N−1,意味着只需调用 N−1 次分类器就能得到答案。相比 OVO 的「打满所有场次再统计票数」,DAG 大大节省了推理时间,非常适合对延迟敏感的场景。实际工程中,libsvm 库内置的 DAG 方法正是利用这一特性来加速多分类预测。

代价也有:单败淘汰制最大的遗憾是「冷门即出局」。如果第一轮 A 和 B 对决时,裁判误判了,A 被提前送回家,那 A 再也没有机会翻身——而且这个错误会沿着树状路径一路传导下去。理论上,DAG 分类的误判率上界近似为 $(N-1)\varepsilon$,其中 $\varepsilon$ 是单个二分类器的误判率。节点越靠近根节点,它的失误影响面越大。

DAG 让我们明白一个道理:省时省力是有代价的。淘汰赛激情高效,但一场误判就可能让真正的强者含恨离场。了解了三种赛制的各自的脾气,我们该坐下来,仔细算算这场大赛的经费与公平了。

Perror≤(N−1)⋅ε\displaystyle P_{error} \le (N-1) \cdot \varepsilon
误差上界公式:单个裁判的误判率 ε 会被 DAG 的层级结构放大 N−1 倍。层数越深、越靠近根部的失误,影响越致命。
  1. 单场误判率设每个二分类器的独立误判率为 $\varepsilon$,这是单个裁判「看走眼」的概率
    ε=P(单场判决错误)\displaystyle \varepsilon = P(\text{单场判决错误})
  2. 路径长度DAG 推理需要走 N−1 次比较,每一步都可能引入新的误差,所以误差上界与路径长度成正比
    N−1\displaystyle N - 1
  3. 级联放大把每一步的误判概率累加起来,得到总误判率上界 $(N-1)\varepsilon$。注意这是上界,实际误差往往更小,但它警示我们:根节点的判罚至关重要
    (N−1)⋅ε\displaystyle (N-1) \cdot \varepsilon

策略对比分析:大赛的经费与公平

办一场比赛,主办方最关心的三件事是:经费(要请多少个裁判)、时长(比赛要打几轮)、公平性(误判的概率有多高)。SVM 多分类策略的选择,本质上也是这三者之间的权衡。

先说「经费」。OVR 需要 N 个分类器,OVO 需要 $N(N-1)/2$ 个分类器,DAG 虽然推理时只走一条路径,但训练时和 OVO 一样,也要准备 $N(N-1)/2$ 个分类器。假设单个二分类 SVM 的训练时间是 $T_{base}$,那么 OVR 的总训练时间约 $O(N \cdot T_{base})$,OVO 和 DAG 约 $O(N^2 \cdot T_{base})$。这意味着当类别数很大时,OVO/DAG 的训练开销可能是 OVR 的好几倍。

再看「公平性」。OVR 的每个裁判都得面对「1 对 N−1」的不均衡样本,天然带着偏见;OVO 的每个裁判只面对两个纯净类别,判断最纯粹,投票汇总通常最稳;DAG 的裁判同样纯粹,但它走的是单败淘汰路径,根节点的误判会被级联放大。大量实验也表明:在多数数据集上,OVO 的准确率略优于 OVR,而 DAG 在准确率与 OVO 接近的同时,推理速度更快。

最后是「推广能力」。OVO 的分类器组合方式让每个子问题都更简单——少样本的稀疏类别也能找到对手,因此对类别不均衡的抵抗力最强。OVR 则因为负类混合体过于庞大,容易在类别边界处产生偏差。综合来看,没有绝对的最优赛制,只有最适合当下资源与目标的选择。

选赛制就是做权衡:想要省钱省时,就用 OVR;想要公平稳妥,就上 OVO;想要极速裁决且能忍受偶发的冷门,DAG 是利器。接下来,我们把视角拉回真正的工程现场。

TOVR=O(N⋅Tbase),TOVO=O(N(N−1)2⋅Tbase)\displaystyle T_{OVR} = O(N \cdot T_{base}), \qquad T_{OVO} = O\left(\frac{N(N-1)}{2} \cdot T_{base}\right)
训练复杂度对比:OVR 的训练时间随类别数线性增长,而 OVO/DAG 随类别数平方增长。这就是「请裁判」的经费差异。
  1. 基准时间$T_{base}$ 表示训练一个二分类 SVM 所需的平均时间,它是所有策略的成本单位
    Tbase\displaystyle T_{base}
  2. 线性成本OVR 只需训练 N 个分类器,所以总时间约为 N 倍的基本单位
    O(N⋅Tbase)\displaystyle O(N \cdot T_{base})
  3. 平方成本OVO 需要训练 $N(N-1)/2$ 个分类器,总时间随 N 的平方上升
    O(N2⋅Tbase)\displaystyle O(N^2 \cdot T_{base})

工程实战选型:怎样挑赛制

真正的比赛,主办方要看的不是理论优劣,而是现实条件:报名人数多少?预算多紧?观众有没有耐心等结果?换到机器学习项目里,这三个问题变成了:类别数多不多?训练资源够不够?推理时延要求严不严?

当类别数较少(比如 3~5 类)时,OVO 和 OVR 的差异不大,用 OVR 可以更省事、更快;当类别数较多(比如数十类)且对精度要求高时,OVO 的投票机制更值得信赖;当类别数极大且推理需要实时响应(比如在线人脸识别)时,DAG 的 N−1 次比较优势会非常突出。而在 Python 的 scikit-learn 中,SVC 默认采用 libsvm 的 OVO 投票机制,你还可以通过 decision_function_shape='ovr' 或 'ovo' 控制 decision_function 输出分数的形态,以适配不同的业务逻辑。

另外一个容易踩坑的细节是:decision_function_shape 只改变决策分数的组织方式,并不改变 predict 的预测结果——predict 始终走 libsvm 内部的投票逻辑。如果你希望自定义 OVR 的「取最大分数」规则,需要自己组合 decision_function 的输出。熟悉这些参数背后的赛制逻辑,才能真正做到「看菜下饭」。

为了更直观地体会两种赛制的差异,下面给出一个完整可运行的 Python 实验,我们会在手写数字数据集上对比 OVO 与 OVR 的分类器数量和准确率。

从公式回到代码,你会发现大赛的「规则说明书」其实就藏在几行 API 里。理解赛制本质,你才不会被参数的默认值牵着鼻子走。

scorek=∑j≠k1[fkj(x)>0]\displaystyle \text{score}_k = \sum_{j \neq k} \mathbb{1}[f_{kj}(x) > 0]
OVO 投票计分公式:第 k 类在所有它参与的对决中,赢得的票数总和。示性函数 1[·] 在条件成立时计 1 票。
  1. 示性函数$\mathbb{1}[条件]$ 在条件为真时取值为 1,否则为 0,用来给「赢」这件事计数
    1[fkj(x)>0]\displaystyle \mathbb{1}[f_{kj}(x) > 0]
  2. 成对判决$f_{kj}$ 是类别 k 与类别 j 之间训练出来的裁判,输出大于 0 表示判给 k
    fkj(x)>0\displaystyle f_{kj}(x) > 0
  3. 汇总得票对 j 遍历所有不等于 k 的类别,把 k 赢下的对局票数相加,得到总得分,最高分者夺冠
    scorek=∑j≠k1[fkj(x)>0]\displaystyle \text{score}_k = \sum_{j \neq k} \mathbb{1}[f_{kj}(x) > 0]

AI 应用场景

新闻主题自动分类

阶段:模型设计与训练

解决的问题:新闻平台每天涌入数十万篇稿件,需要自动划分为财经、体育、科技、娱乐等多类主题。传统的关键词规则命中率低、维护成本高,而 SVM 二分类模型无法直接处理多主题;采用 OVO 策略后,每两个主题之间训练一个专门裁判,通过投票综合判定,能显著提升易混淆主题(如「财经」与「科技早报」)的区分度。

具体案例:某资讯 App 在稿件入库时使用基于 OVO 的多分类 SVM,将 20 个一级频道拆成 190 个两两分类器。相比原先的词频统计规则,分类准确率从 72% 提升至 91%,并且新增主题时只需增量训练相关子分类器,不必重训全量模型。

工业设备故障诊断

阶段:模型推理与部署

解决的问题:产线传感器采集到振动、温度等信号后,需要判断设备处于正常、磨损、断裂等 4~6 种状态。故障样本稀缺、正常样本海量,OVR 的「1 对 N−1」天然会放大样本不均衡;改用 OVO 后,每种故障状态之间单独比对,小样本类别也能获得公平的判决机会。

具体案例:某工厂在旋转机械上部署 OVO 多分类 SVM,用 6 类振动波形训练出 15 个二分类器。当某个两两分类器报警时,系统能直接定位到「哪两类状态被混淆」,帮助工程师快速锁定故障特征,维修响应时间缩短了 40%。

声纹身份核验

阶段:在线推理服务

解决的问题:银行电话客服系统需要在用户说话的前 3 秒内完成身份确认,注册用户可能多达几千人。若用 OVR 要计算上千个分类器分数,时延不可接受;DAG 策略在训练阶段同样构建两两分类器,但推理时只沿一条根到叶的路径行走,只需 N−1 次比较就能锁定身份,极大降低响应延迟。

具体案例:某金融 App 的声纹登录功能采用 DAG-SVM 结构,在 5000 人的声纹库上,将平均认证耗时压缩至 80 毫秒以内,同时保持了 95% 以上的通过率;当根节点分类器置信度不足时,系统自动降级为 OVO 全量投票复核,兼顾速度与安全。

Python 演示

python25 行
from sklearn.datasets import load_digitsfrom sklearn.model_selection import train_test_splitfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_score data = load_digits()mask = data.target < 4X, y = data.data[mask], data.target[mask]X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.3, random_state=42) n_classes = len(set(y))print(f'类别数 N = {n_classes}') for shape in ['ovr', 'ovo']:    model = SVC(decision_function_shape=shape, kernel='rbf',                C=1.0, gamma='scale')    model.fit(X_train, y_train)    pred = model.predict(X_test)    scores = model.decision_function(X_test)    n_clf = scores.shape[1]    theory = n_classes if shape == 'ovr' else n_classes * (n_classes - 1) // 2    print(f'shape={shape} 分类器数量={n_clf} 理论值={theory} '          f'准确率={accuracy_score(y_test, pred):.3f}')    print(f'第一个样本的决策分数: {scores[0]}')
目的:在 4 类手写数字子集上对比 scikit-learn 中 SVC 的 OVR 与 OVO 两种多分类模式,观察分类器数量差异,并验证它们都能完成多分类预测。
  1. mask = data.target < 4只保留数字 0~3 四个类别,构造一个合适的多分类实验场景。
  2. SVC(decision_function_shape=shape, kernel='rbf')创建 SVM 分类器,decision_function_shape 决定决策分数的组织方式。
  3. scores = model.decision_function(X_test)获取每个测试样本在多分类框架下的原始决策分数矩阵。
  4. n_clf = scores.shape[1]从决策分数的列数反推实际使用的二分类器数量。
  5. theory = n_classes * (n_classes - 1) // 2用 OVO 公式算出理论分类器数量,与实测值互相印证。
  6. accuracy_score(y_test, pred)计算两种策略在测试集上的准确率,观察它们在精度上的实际差异。

常见误区

误区我一直以为调用了 `model.predict(x)` 能得到三类甚至十类的标签,SVM 自然就支持多分类,不需要额外设计什么策略。

正解标准 SVM 的决策函数只能用 sign(w·x+b) 输出 +1 或 −1,本质上是一个「二选一裁判」。多分类能力完全来自外部的策略包装——OVR、OVO、DAG 都是把多个二分类器组合起来的人工规则,而不是 SVM 本身新增了什么能力。

为何常见:scikit-learn 等框架把多分类过程封装得太透明,调用者只看到输入输出,误以为 SVM 原生支持多分类,忽略了内部其实是「多个裁判在协作」。

误区网上都说 OVO 更稳,那我不管什么任务都无脑用 OVO,反正它一定比 OVR 准。

正解大量实验表明 OVO 在多数数据集上表现更好,但这不是数学定理。当类别数很少、各类样本充分均衡时,OVR 的「1 对 N−1」负类混合体并不会造成严重偏差,且 OVR 的分类器数量更少、训练更快,准确率可能与 OVO 持平甚至略高。选型应结合数据量、类别数和资源综合判断。

为何常见:人们容易把「统计上更优」误解为「绝对更优」,忽略了算法性能强烈依赖具体数据分布这一基本原则。

误区我把 `decision_function_shape` 从 `'ovr'` 改成 `'ovo'`,模型的测试准确率变了,肯定是这个参数决定了最终分类结果。

正解在 scikit-learn 的 SVC 中,decision_function_shape 只影响 decision_function 返回分数的形状(列数不同),不影响 predict 的类别输出——predict 始终走 libsvm 内部的投票逻辑。准确率变化往往来自随机因素或你对 decision_function 的后续处理,而不是这个参数本身。

为何常见:参数名带有 decision 字样,容易让人误以为它控制着决策全过程,实际上它只是「决策分数的展示格式」开关。

误区DAG 训练的也是两两分类器,数量公式和 OVO 一样,那它不就是 OVO 换了个名字吗?

正解两者训练阶段确实相同,都构建 $N(N-1)/2$ 个二分类器,但推理阶段截然不同:OVO 让所有分类器都上场投票,最终按票数定冠军;DAG 则从根节点出发,每次只调用一个分类器做「淘汰判决」,仅走 N−1 次就能到达冠军。DAG 更快,但也因此引入了误差沿路径累积的风险。

为何常见:只关注「训练了几个分类器」这种可见的数字,忽略了「推理时怎么用这些分类器」这个更关键的过程差异。

误区OVR 训练 N 个分类器时,每个分类器还是用原来的类别标签,只是换了不同的核函数或超参数来区分各个类别。

正解OVR 的关键操作是「重标注」:对第 i 类训练时,所有第 i 类样本的标签置为 +1,其余所有类别的样本标签全部置为 −1。也就是说,每个分类器面对的其实是一个「第 i 类 vs 大杂烩」的二分类问题,而不是原始的多分类问题。

为何常见:我们习惯认为标签是数据自带的、不可修改的,忽略了多分类扩展策略本质上就是在「改写比赛规则」,包括重新定义对手和裁判标准。

面试题

Q1. 为什么标准 SVM 无法直接完成多分类任务?

单选题 · easy

  • A.训练过程过于复杂
  • B.决策输出只有正负两类← 正确答案
  • C.需要大量附加训练样本
  • D.核函数只支持线性场景

答案:B。标准 SVM 的决策函数 sign(w·x+b) 只能输出 +1 或 −1 两个值,本质是「二选一裁判」。A 与训练复杂度无关,C 不是根本原因,D 错误——SVM 支持多种核函数。

Q2. 用 OVR 策略处理 N 类分类问题,需要训练多少个二分类器?

单选题 · easy

  • A.恰好 N 个分类器← 正确答案
  • B.恰好 N−1 个分类器
  • C.恰好 N+1 个分类器
  • D.恰好 N(N−1)/2 个分类器

答案:A。OVR 为每个类别安排一位「擂主」,共 N 个分类器,每个分类器负责「该类 vs 其余所有类」。D 是 OVO 的分类器数量,B、C 不符合定义。

Q3. 类别数为 N 时,OVO 一对一策略需要构建多少个二分类器?

单选题 · mid

  • A.恰好 N 个分类器
  • B.恰好 2N 个分类器
  • C.恰好 N(N−1)/2 个分类器← 正确答案
  • D.恰好 N(N+1)/2 个分类器

答案:C。OVO 从 N 类中任选两类组合,组合数为 $C_N^2 = N(N-1)/2$。D 是包含「自己对自己」的错误计数,A 是 OVR 的数量。

Q4. DAG 方法在推理阶段判定 N 个类别中的冠军,需要执行多少次分类比较?

单选题 · mid

  • A.恰好 N 次比较
  • B.恰好 N−1 次比较← 正确答案
  • C.恰好 N(N−1) 次比较
  • D.恰好 N(N−1)/2 次比较

答案:B。DAG 从根节点出发,每条边代表一次二分类比较,每比一次淘汰一个类别,从 N 个类别中留下 1 个共淘汰 N−1 次。D 是训练阶段的分类器总数,不是推理路径长度。

Q5. 以下哪些是 OVR 一对多策略的固有缺点?

多选题 · mid

  • A.负类合并导致样本不均衡← 正确答案
  • B.每个分类器都要用全部样本← 正确答案
  • C.推理时必须两两投票表决
  • D.需要训练组合数级分类器

答案:AB。OVR 把其余所有类合并成一个「大杂烩」负类,正负样本比例常失衡,且 N 个分类器每个都在全部样本上训练,重复开销大。C、D 是 OVO 的特点,不属于 OVR。

Q6. 在 scikit-learn 的 SVC 中设置 decision_function_shape='ovo',会产生什么效果?

单选题 · mid

  • A.改变预测标签的输出类别
  • B.改变决策分数的输出形状← 正确答案
  • C.减少训练时的支持向量数量
  • D.跳过二分类器的训练过程

答案:B。该参数只控制 decision_function 返回分数的组织格式(列数不同),不改变 predict 结果,也不影响支持向量。A、C、D 都误解了它的作用范围。

Q7. 关于 DAG 有向无环图方法,以下哪些描述是正确的?

多选题 · hard

  • A.推理阶段仅需 N−1 次比较← 正确答案
  • B.训练分类器数量少于 OVR
  • C.不存在误差逐层累积问题
  • D.适合在线低时延推理场景← 正确答案

答案:AD。DAG 推理走单条路径,只需 N−1 次比较,因此时延低,适合在线场景。它的训练分类器数量与 OVO 相同,多于 OVR;同时存在「根节点误判被级联放大」的误差累积问题。

Q8. 类别数 N=10 时,OVO 的训练开销与 OVR 相比通常如何?

单选题 · hard

  • A.OVO 更快,因为子问题样本较少
  • B.OVR 更快,因为分类器数量更少← 正确答案
  • C.两者训练时间完全相同
  • D.取决于核函数是否为线性

答案:B。OVR 训练 10 个分类器,OVO 训练 45 个分类器。尽管 OVO 每个子问题的训练样本更少,但数量差距悬殊,总训练时间通常 OVR 明显更快。D 不是主要决定因素。

Q9. 以下哪些场景更适合选择 OVR 策略?

多选题 · hard

  • A.类别数很少,只有三五类← 正确答案
  • B.各类别样本数量较为均衡← 正确答案
  • C.推理延迟要求达到纳秒级
  • D.类别之间存在大量相似混淆

答案:AB。类别数少时 OVR 分类器少、训练快,样本均衡时它的「负类混合」偏差也小,因此适用。纳秒级推理应优先 DAG;类别间相似混淆多时 OVO 的两两专用裁判更擅长区分。

Q10. 关于 DAG 方法的误差累积效应,以下哪项说法最准确?

单选题 · extreme

  • A.底层误判会随层数自动消除
  • B.误判概率与类别数量完全无关
  • C.靠近根节点的误判影响最大← 正确答案
  • D.各节点独立所以不存在累积

答案:C。DAG 是单败淘汰结构,根节点的判决会决定后续整条路径的走向,一旦根节点判错,错误将沿路径放大。误差上界 $(N-1)\varepsilon$ 说明层数会放大误差,靠近根部的节点影响最大。A、D 否认累积,B 忽视了 N−1 的放大项。