逻辑回归怎么做多分类?Softmax 和 OvR 有什么区别?
简化版
逻辑回归原生是二分类,扩展到多分类有两种主流方式。Softmax 回归(多项逻辑回归):把 sigmoid 换成 softmax,一个模型直接输出 K 个类别的概率(和为 1、互斥),用多类交叉熵训练——适合类别互斥的单标签分类。OvR(One-vs-Rest,一对多):训练 K 个独立的二分类器,每个判「是本类 vs 不是本类」,预测时取得分最高的——通用、可复用任意二分类器,但各分类器概率不天然归一、可能都低或都高。此外还有 OvO(一对一),训练 K(K-1)/2 个两两分类器投票。互斥单标签优先 Softmax;想复用二分类器或多标签用 OvR。
详细版
三种方案对比:
| 方案 | 分类器数量 | 概率是否互斥归一 | 特点 |
|---|---|---|---|
| Softmax | 1 个(K 组权重) | 是(和为 1) | 类别互斥的单标签分类,统一建模 |
| OvR(一对多) | K 个 | 否(各自独立) | 通用、可复用任意二分类器,训练快 |
| OvO(一对一) | K(K-1)/2 个 | 否(投票) | 每个分类器只用两类数据,子问题较小但仍可能不平衡,且数量多 |
Softmax 公式:
P(y=k | x) = e^(w_k·x) / Σⱼ e^(w_j·x) (K 个得分做指数归一化,和为 1)
- sigmoid 是 Softmax 在 K=2 时的特例。
- 用多类交叉熵训练:
L = -Σ yₖ log(pₖ)。
OvR 要点: K 个「本类 vs 其余」二分类器,预测取概率最高者;但各分类器独立训练,概率不可直接比较(需校准),且每个都面临类别不平衡(1 类 vs K-1 类)。
完整版教学
一、问题起点:二分类的逻辑回归怎么变多分类
标准逻辑回归用 sigmoid 输出「正类概率」,只能区分两类。面对 K(>2)个类别(如手写数字 0~9、新闻分类),有两条思路:
- 改造模型本身,让它一次输出 K 个类别的概率 → Softmax 回归。
- 不改模型,组合多个二分类器 → OvR、OvO。
两条思路各有适用场景,下面讲透。
二、Softmax 回归:把 sigmoid 推广到 K 类
核心:给每个类别 k 一组权重 w_k,算出 K 个线性得分 z_k = w_k·x,再用 softmax 把这 K 个得分转成和为 1 的概率分布:
P(y=k | x) = e^(z_k) / (e^(z_1) + e^(z_2) + ... + e^(z_K))
- 指数保证非负,除以总和保证归一(概率和为 1)。
- 预测取概率最大的类别。
- K=2 时,softmax 退化成 sigmoid——所以逻辑回归是 Softmax 回归的特例,Softmax 是它的自然推广。
训练:用多类交叉熵(标签 one-hot):
L = - Σₖ yₖ log(pₖ) (yₖ 是 one-hot,只有真实类那项留下 -log(p_真实类))
同样由最大似然(多项分布)推出,凸、可梯度下降。
关键性质:softmax 输出互斥——各类别概率此消彼长(一类涨别的就跌),总和恒为 1。所以它天然适合**「一个样本恰属于一个类别」的单标签互斥分类**。
三、OvR(One-vs-Rest,一对多):拆成 K 个二分类
做法:对每个类别训练一个二分类器:
分类器 1:类别1 vs 其余所有
分类器 2:类别2 vs 其余所有
...
分类器 K:类别K vs 其余所有
预测时,把样本喂给全部 K 个分类器,取输出概率/得分最高的那个类别。
优点:
- 通用:不改二分类器内部,任何二分类模型(逻辑回归、SVM…)都能这么扩展。
- 训练分类器数量少(K 个),实现简单。
缺点:
- 概率不互斥、不归一:K 个分类器独立训练,输出的概率不在同一尺度,可能「都很低」或「都很高」,直接比大小不够严谨(需要概率校准)。
- 类别不平衡:每个分类器都是「1 类 vs K-1 类」,负样本远多于正样本,K 大时不平衡严重。
四、OvO(One-vs-One,一对一):两两对决投票
做法:给每一对类别训练一个二分类器,共 K(K-1)/2 个。预测时每个分类器投一票给它选的类,得票最多的类别胜出。
优点:
- 每个分类器只用两个类别的数据训练,样本量小、训练快、且天然不受全局类别不平衡影响。
缺点:
- 分类器数量随 K 平方增长,K 大时非常多(100 类要近 5000 个),存储和预测开销大。
OvR vs OvO:类别少或要少建模型 → OvR;单分类器训练贵、想让每个子问题简单 → OvO(如 SVM 常用 OvO)。
五、Softmax vs OvR,到底怎么选
| 维度 | Softmax | OvR |
|---|---|---|
| 建模 | 一个统一模型 | K 个独立模型 |
| 概率 | 互斥、和为 1、可直接比较 | 独立、不归一、需校准 |
| 适用 | 类别互斥的单标签分类 | 通用、可复用二分类器 |
| 多标签 | 不适合(强制互斥) | 适合(各类独立判断) |
| 类别不平衡 | 统一处理 | 每个子分类器都面临不平衡 |
选择原则:
- 类别互斥、单标签(数字识别、新闻单一分类)→ Softmax 更自然、概率更规范。
- 多标签(一篇文章可同时属于「科技」和「财经」)→ 不能用 softmax(它强制互斥),要用 OvR,每个类别独立用 sigmoid 判「是/否」。
- 想直接复用现成二分类器(如 SVM)→ OvR / OvO。
六、常见追问
- softmax 数值溢出怎么办?
e^z在 z 大时会溢出,实现时先减去最大值:softmax(z) = softmax(z - max(z)),结果不变但数值稳定。 - 多标签分类用什么? 不是多分类而是「K 个独立二分类」,每类各一个 sigmoid + 二元交叉熵,别用 softmax。
- Softmax 的参数有冗余吗? 有——给所有
w_k同时加一个常向量,概率不变(平移不变性),所以有时固定一类权重为 0(K-1 组参数即可),这也解释了 K=2 时退化为一个 sigmoid。 - sklearn 里怎么控制?
LogisticRegression(multi_class='multinomial')是 Softmax,'ovr'是一对多。
七、用算例与工程边界复核
K=3 时,Softmax logits [2,1,0] 的指数约为 [7.389,2.718,1],归一化后概率约 [0.665,0.245,0.090],三类和为 1。OvR 则训练 3 个独立二分类器,原始概率不必相加为 1。
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| Softmax | 联合优化 K 类归一化概率 | 类别互斥、概率可直接比较 |
| OvR | K 个本类对其余分类器 | 简单并可复用二分类器 |
| OvO | K(K-1)/2 个两两分类器 | 分类器多但单个训练集更小 |
把推导和选择压缩成执行路径:
mutually exclusive labels?
-> yes: softmax or OvR
multi-label?
-> independent sigmoid heads, not softmax
多标签任务不能用一个 Softmax 强制概率和为 1;每个标签应独立 sigmoid,允许同时为真。
八、常见误区与追问
- 误区:OvR 的 K 个概率天然加起来等于 1。 各二分类器独立训练,分数需比较或校准,不具备联合归一化约束。
- 误区:Softmax 参数完全可识别且没有冗余。 所有类 logit 同加常数概率不变,常固定参考类或由正则选择表示。
- 追问:Softmax 为什么数值上减最大 logit? 平移所有 logit 不改概率,减最大值能避免 exp 上溢。
- 追问:K 类 OvO 要多少分类器? 需要 K(K-1)/2 个,例如 10 类需要 45 个。
- 追问:类别极不平衡时怎么做? 可使用类权重、分层验证和按类阈值,并检查 macro 指标。
九、加强记忆
记忆时抓住这条主线:逻辑回归做多分类三条路:Softmax(多项逻辑回归) 把 sigmoid 换成 softmax,一个模型输出 K 个和为 1、互斥的概率(sigmoid 是它 K=2 的特例),用多类交叉熵训练,适合类别互斥的单标签分类;OvR(一对多) 训 K 个「本类 vs 其余」 二分类器取最高分,通用、可复用任意二分类器、可做多标签,但概率不归一、每个子问题类别不平衡;OvO(一对一) 训 K(K−1)/2 个两两分类器投票,子问题较小但两类仍可能不平衡,且数量随 K 平方增长。选择:互斥单标签→Softmax,多标签或复用二分类器→OvR,单分类器训练贵→OvO。实现记住 softmax 减最大值防溢出。