【漫话机器学习系列】194.“一对其余”逻辑回归(One-Vs-Rest Logistic Regression)

原图作者:Chris Albon
适用场景:机器学习 / 数据挖掘 / 多分类建模


一、背景介绍

1.1 什么是逻辑回归?

逻辑回归(Logistic Regression)是机器学习中一种非常经典的二分类算法。它的核心思想是:

  • 输入特征(X)

  • 输出一个概率(0 到 1 之间)

  • 用阈值(通常是0.5)决定分类结果

适用于解决「是 / 否」这类二分类问题。


1.2 但实际问题往往不止两个类别

现实世界的数据,经常是多类别(Multi-class)的,比如:

场景类别
邮件分类正常 / 垃圾 / 广告 / 诈骗
图像识别狗 / 猫 / 鸟 / 其他
客户状态活跃 / 流失 / 潜在

那么,逻辑回归能不能处理这种多分类问题呢?

答案是:可以,但需要扩展。 其中一种常用的扩展方式就是 —— 一对其余(One-Vs-Rest,简称 OvR 或 OVR)


二、什么是一对其余(One-Vs-Rest)逻辑回归?

一对其余(One-Vs-Rest Logistic Regression):是二元逻辑回归的扩展版,用于解决多分类问题。

核心思想非常直观:

  • 针对每个类别,单独构建一个二分类器。

  • 让模型学会区分:

    • 这个类别(1)

    • 其他所有类别(0)


三、工作机制与流程

假设现在有 3 个类别:

  • 类别A

  • 类别B

  • 类别C

步骤如下:

类别模型构建方式训练目标
A vs RestA 为正类(1),其他为负类(0)判断是否属于A
B vs RestB 为正类(1),其他为负类(0)判断是否属于B
C vs RestC 为正类(1),其他为负类(0)判断是否属于C

也就是说,原本是一个多分类问题,现在被拆解为 3 个独立的二分类问题。


四、预测流程

  1. 输入一个样本

  2. 让这 3 个模型分别打分(预测为各自类别的概率)

  3. 选择概率最大的类别,作为最终预测结果

这种思路的好处在于:

  • 简单直接

  • 每个模型专注判断“自己 vs 其他”

  • 可以复用原有的二分类工具(逻辑回归、支持向量机、朴素贝叶斯等)


五、总结

优点缺点
简单易实现,容易理解类别不均衡时效果不佳
模型独立训练,便于并行类别数太多时,模型数量膨胀
兼容所有二分类器类别之间没有直接关系建模

六、适用场景

One-Vs-Rest 通常适合:

  • 类别数量不多

  • 各类别之间独立、差异较大

  • 希望复用现有二分类模型


七、在 Python 中如何实现 OvR 逻辑回归?

sklearn 已经帮我们封装好了:

from sklearn.linear_model import LogisticRegression

# OvR 是 sklearn 中多分类的默认方式
model = LogisticRegression(multi_class='ovr')
model.fit(X_train, y_train)


八、与其他多分类方法对比

方法说明
One-Vs-Rest一对其余,每个类别单独建模
One-Vs-One一对一,每两个类别都建一个模型
Softmax Regression直接学习多类别之间的概率分布(常用于深度学习)

九、一句话总结

One-Vs-Rest 逻辑回归 = 把多分类问题转化为多个二分类问题,简单、直观,适用于小类别场景,是机器学习入门多分类的首选思路之一。

### One-vs-Rest 分类策略概述 One-vs-Rest (OvR),也称为 One-vs-All (OvA),是一种用于扩展二元分类器以处理多类别分类问题的经典方法。其核心思想是通过构建多个二元分类模型来分别区分某一特定类别与其他所有类别[^1]。 具体而言,在 OvR 方法中,对于具有 \( K \) 个类别的数据集,会训练 \( K \) 个独立的二元分类器。每个分类器的目标是识别某一个类别相对于其他所有类别。当预测新样本时,这些分类器会对该样本进行评分,并最终选择得分最高的类别作为预测结果[^2]。 以下是基于 Python 的简单实现示例: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import SVC # 加载 Iris 数据集 data = load_iris() X, y = data.data, data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 使用支持向量机作为基础分类器 base_classifier = SVC(kernel='linear') # 构建 One-vs-Rest 分类器 ovr_classifier = OneVsRestClassifier(base_classifier) ovr_classifier.fit(X_train, y_train) # 预测并评估性能 predictions = ovr_classifier.predict(X_test) accuracy = sum(predictions == y_test) / len(y_test) print(f"Accuracy: {accuracy * 100:.2f}%") ``` 此代码片段展示了如何利用 Scikit-Learn 中的 `OneVsRestClassifier` 类快速应用 OvR 策略。它接受任何兼容的二元分类器(如 SVM 或逻辑回归),并通过内部机制自动创建所需的多个子分类器[^3]。 值得注意的是,尽管 OvR 是一种有效的方法,但在某些情况下可能会遇到不平衡的数据分布问题。这是因为每次训练都涉及将单个类别标记为正类,而其余所有类别被标记为负类,这可能导致部分分类器接收到过多噪声或不均衡的信息[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值