← 返回题目列表

SVM 是二分类模型,怎么做多分类?

高频 中等 第 10 / 25 题 更新于 2026/08/02
支持向量机SVM多分类OvOOvR

简化版

经典 SVM 优化目标针对二分类,多分类通常通过组合策略扩展。**OvR(One-vs-Rest,一对多)**训练 K 个「该类 vs 其余类」分类器并比较决策分数;**OvO(One-vs-One,一对一)**训练 K(K-1)/2 个两两分类器并投票或聚合置信度。选择取决于实现和规模:LIBSVM 及基于它的 sklearn SVC 内部采用 OvO,而 LinearSVC 通常采用 OvR,这不是 SVM 理论规定的统一默认值。两类子问题比全量问题小,但仍可能类别不平衡;此外还有 Crammer–Singer 这类联合多分类目标。

详细版

两种主流策略:

策略分类器数量每个分类器用的数据预测方式特点
OvR(一对多)K全部数据(1 类 vs 其余)取打分最高分类器少;每个类别不平衡
OvO(一对一)K(K-1)/2只用相关两类投票/置信度聚合子问题较小;类别多时模型数平方增长,两类仍可能不平衡

OvO(LIBSVM / sklearn SVC 的内部策略):

  • 每个分类器只区分两个类,训练集小、训练快。
  • 每个子问题只用两类样本,天然避免「1 对多」的严重不平衡。
  • 缺点:K 大时分类器数量随 K² 增长(100 类≈4950 个)。

OvR:

  • 只需 K 个分类器,模型少。
  • 缺点:每个分类器「1 类 vs K-1 类」,负样本远多于正样本,类别不平衡;各分类器打分不在同一尺度,比较不够严谨。

完整版教学

一、为什么需要组合策略

标准 SVM 找一个超平面把样本分成两类,天生只能处理二分类。面对 K(>2)个类别(如手写数字识别 0~9),不能直接用一个 SVM。解决办法是把多分类拆成若干个二分类子问题,用多个 SVM 组合。主流有 OvO 和 OvR 两种拆法,思路和逻辑回归的多分类扩展一致,不同实现的工程选择不同:核 SVC 常用 OvO,而线性 SVM 常用 OvR。

二、OvR(一对多):K 个「本类 vs 其余」

做法:对每个类别 k 训练一个二分类 SVM,正样本是类别 k、负样本是其余所有类别

SVM 1:类别1  vs  {类别2,3,...,K}
SVM 2:类别2  vs  {类别1,3,...,K}
   ...
SVM K:类别K  vs  {其余}

预测:把样本送进全部 K 个 SVM,每个给一个打分(到超平面的带符号距离),取打分最高的类别作为结果。

优点:只要 K 个分类器,模型数量少、结构简单。

缺点

  • 类别不平衡:每个子问题都是「1 个类 vs K-1 个类」,负样本远多于正样本,K 越大越不平衡,影响每个 SVM 的训练质量。
  • 打分不可比:K 个 SVM 独立训练,输出的距离打分不在同一尺度,直接比大小取最高不够严谨。
  • 每个分类器都要用全部数据训练,单个训练成本高。

三、OvO(一对一):每两类一个分类器

做法:对每一对类别 (i, j) 训练一个二分类 SVM,只用这两类的样本,共需

C(K,2) = K(K-1)/2 个分类器

例如 3 类要 3 个(1v2、1v3、2v3),10 类要 45 个。

预测:让全部 K(K-1)/2 个分类器各自判断、投票,最终票数最多的类别胜出(平票再按打分等规则打破)。

优点

  • 每个子问题只用两类数据,训练集小、单个分类器训练快(SVM 训练复杂度对样本数超线性,用小子集反而总体更划算)。
  • 天然抗类别不平衡:每个子问题只涉及两类,不存在「1 对多」的悬殊比例。

缺点

  • 分类器数量随 K² 增长,K 很大时数量惊人(100 类需 4950 个),存储和预测(要跑所有分类器投票)开销大。

四、为什么核 SVC 实现常选择 OvO

逻辑回归做多分类常用 Softmax 或 OvR;LIBSVM 及 sklearn SVC 内部采用 OvO,主要与核 SVM 子问题的规模有关:

  • 核 SVM 的时间与内存对单个子问题的样本数很敏感。OvR 的 K 个分类器各用全部 m 个样本;OvO 虽有 K(K-1)/2 个分类器,但每个只读取对应两类,因此多个较小的核问题可能更易求解。
  • 这不是固定复杂度公式能直接下的结论:类别比例、支持向量数量、缓存、并行度和求解器都会影响总成本。OvO 去掉了“其余所有类”这个混合集合,却不能保证两类数量平衡。

因此应把 OvO 看作常见核 SVC 的实现取舍,而非 SVM 的数学默认。线性求解器在全量稀疏数据上扩展更好,采用 OvR 很常见;LR 还可以直接用联合 Softmax。

五、直接多分类的 SVM(了解即可)

除了拆分组合,也可以把 K 组权重放入一个联合目标。Crammer–Singer 多类 SVM 对每个样本比较正确类分数与最强错误类分数,并要求至少一个间隔;违反间隔时联合更新相关类别权重。

联合目标能直接表达类别竞争,但优化和实现更复杂,经验效果也不保证优于 OvR/OvO。面试中应说明它是合法的直接多分类方法,并把“工程上较少采用”与“理论上不能使用”区分开。

选择策略时还要看输出需求:OvO 的票数不是概率,OvR 的不同分类器分数也未必天然可比。若业务需要可靠的多类概率,应考虑校准或直接采用概率模型,并在独立验证集检验概率质量。

六、常见追问

  • OvO 和 OvR 哪个好? 没有绝对答案。核 SVC 常因子问题更小而采用 OvO;类别很多时模型数与预测成本会增长。线性 SVM 常用 OvR,最终要以库实现、训练规模和验证结果为准。
  • OvO 平票怎么办? 用分类器打分(决策值)总和等规则打破平局。
  • 多分类 SVM 能出概率吗? 可以在组合基础上再做概率校准(如成对耦合 pairwise coupling),但非原生。
  • 类别极多(上千)用 SVM 多分类合适吗? 不太合适——OvO 分类器数量 O(K²) 爆炸、OvR 不平衡严重,这类场景更适合能天然多分类、可扩展的模型(Softmax、树集成、神经网络)。

七、用算例与工程边界复核

K=5 类时,OvR 训练 5 个分类器;OvO 训练 5×4/2=10 个。预测时 OvR 比较 5 个分数,OvO 汇总 10 场两两投票或置信度;“SVM 默认哪种”取决于具体库和基学习器实现。

对象/方案核心机制选择或风险
OvRK 个分类器数量少、每个看全量数据
OvOK(K-1)/2 个单个只看两类、分类器数量多
直接多类联合最大间隔目标实现与优化更复杂

把推导和选择压缩成执行路径:

choose library and base SVM
 -> inspect native strategy
 -> calibrate comparable scores if needed
 -> evaluate macro/per-class metrics

scikit-learn SVC 内部训练采用 OvO;其 decision_function_shape 可把输出整理成 OvR 形状,但不改变底层训练策略。

八、常见误区与追问

  • 误区:所有 SVM 库都默认 OvO。 这是实现选择,不是 SVM 理论强制;LinearSVC 等可能采用 OvR。
  • 误区:OvR 分数天然可跨分类器当概率比较。 独立分类器尺度可能不同,需要决策规则或校准。
  • 追问:OvO 平票怎么办? 库可结合决策函数置信度、类别顺序或额外 tie-break 规则。
  • 追问:类别数很大时哪种更省模型数? OvR 只需 K 个,OvO 为二次增长。
  • 追问:多标签能用 OvR 吗? 可以为每个标签训练独立二分类器,多个标签可同时为真。

九、加强记忆

记忆时抓住三条实现路线:OvR 训练 K 个“本类 vs 其余”分类器,模型少但每个使用全量样本且分数需要可比;OvO 训练 K(K-1)/2 个两类分类器并投票或聚合置信度,单个子问题较小但模型与预测成本按 K² 增长,两类数据仍可能不平衡;Crammer–Singer 则用一个联合间隔目标直接训练多类权重。LIBSVM / sklearn SVC 内部用 OvO,LinearSVC 常用 OvR——这是实现选择,不是 SVM 理论的统一默认。选择时联合考虑 K、每类样本数、核矩阵成本、并行与概率需求,并以所用库文档和验证结果为准。