补充:二分类器实现多分类 --- 一对一与一对多策略

文章目录

  • 前言
  • 一、一对多(One-vs-Rest, OvR)
    • 1 理论
    • 2 决策原则(这里给出的是SVM的,其他的二分类器也类似)
    • 2 简单代码演示
  • 二、 一对一(One-vs-One, OvO)
    • 1 理论
    • 2 决策原则(投票)
  • 3 简单代码演示
  • 总结


前言

我在大三刚接触到机器学习课程的时候,回归问题很自然就能跨过这个坎。但在分类这个问题上,遇到的疑问一个接一个,本博客就是为了解答我本科学习期间的一个二分类器的疑问所作出的解答。

刚开始学习机器学习时,我们学习的最简单的例子就是二分类的案例。这也就导致了我们学习了很多的二分类器,例如逻辑回归二分类器、支持向量机二分类器等等。当时我就一个疑问,那不是二分类问题怎么办,那这些二分类器就显得很作用受限,后来随着知识量的增多。我了解到这个问题有两种解决方案:
(1)用softmax回归进行多分类(其实是逻辑回归的推广)
该方法本质上是将二分类器 ----> 推广为 多分类器

(2)一对多(One-vs-Rest, OvR)或一对全(One-vs-All, OvA)
这种本质上训练多个二分类器组合进行多分类的方法我一直不明白其中的具体原理是什么,下面本博客就主要是这种特殊的多分类技术的详细说明 ---- 顺便说一下,在我写这篇博客的时候,以前的疑问自然就已经解决了才会开始写;所以读者不必担心看不懂。其实我当成为了这个问题找了一些网上资料,但都不是很满意,都写的很模糊,今天在这里给这种技术做一个详细的说明。
【注】:本文会以鸢尾花的多分类数据集用SVM二分类器进行演示。

支持向量机(Support Vector Machine, SVM)本质上是一个二分类模型,但是在实际应用中,往往需要处理多分类问题。为了解决多分类问题,可以将多个二分类SVM组合在一起。常用的两种策略是一下两种:

一、一对多(One-vs-Rest, OvR)

1 理论

这种方法也称为“二分之一”法。基本思路是将一个多分类问题拆解成多个二分类问题。具体步骤如下:

  • 假设有 K K K个类别。
  • 对于每个类别 k k k,训练一个二分类SVM来区分类别 k k k 和其他 K − 1 K-1 K1 个类别。即,每个SVM的目标是将该类别的数据点与所有其他类别的数据点分开。并规定 k k k类为正类,其他 K − 1 K-1 K1 个类别为负类。
  • 对于每个类别 k k k,标记为1,如果是该类别的数据点,否则标记为-1。
  • 最终,训练 K K K个二分类SVM。

2 决策原则(这里给出的是SVM的,其他的二分类器也类似)

在预测时,将输入数据点输入到所有 K K K 个分类器中,选择得分最高的分类器对应的类别作为最终预测结果。
这句话怎么理解,这个得分究竟怎么计算的,我一直有一个疑惑,没关系,下面给出详细解释:
得分最高分类器的理解:
在“一对多”(One-vs-Rest, OvR)策略中,“得分最高的分类器”是指在预测过程中,将输入数据点送入每个分类器后,选择输出得分最高的那个分类器对应的类别作为最终的预测结果。为了更好地理解这一过程,我们可以深入探讨以下几个关键点:

(1) 一对多策略的分类器得分
在一对多策略中,对于一个 K K K类问题,我们会训练 K K K个二分类支持向量机(SVM)。每个SVM k k k的任务是区分类别 k k k 和其他所有类别。训练过程中,类别 k k k的数据点被标记为正类(+1),而其他类别的数据点被标记为负类(-1)。
每个分类器在预测时会计算一个决策函数值或得分,表示该数据点属于正类的程度。这个得分可以理解为到分类平面的距离(考虑符号)。

(2) 决策函数值的含义
对于SVM,决策函数 f ( x ) f(x) f(x) 的值可以表示输入数据点 x x x 到分类超平面的距离。通常,正的得分表示数据点更接近于正类,负的得分表示更接近于负类。决策函数的值越大,模型越自信该数据点属于正类。
例如,对于一个数据点 x x x,SVM的决策函数值 f k ( x ) f_k(x) fk(x)可以用来表示数据点 x x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习在蛋白质结构预测的新突破:AlphaFold、RoseTTAFold与ESMFold

在蛋白质结构预测和功能预测领域,基于机器学习的方法最近取得了显著的进展。特别是深度学习技术在这个领域中展现出了强大的能力,代表性的技术有 DeepMind 的 AlphaFold 和 RoseTTAFold。这些技术利用了大量的生物数据和先进的神经网络架构,极…

调试代码Pair-wise-Similarity-module-master

第一步:运行.py文件生成json文件 问题一:json.decoder.JSONDecodeError: Invalid \escape: line 1 column 31616 (char 31615) 解决: for dataset in dataset_list:with open(datasetmap[dataset] ".csv", "r") as li…

什么是Arkose Labs挑战及其解决方法

Arkose Labs挑战是一种复杂的机制,旨在验证用户是真正的人类,而不是自动化的机器人或脚本。这一挑战在维护在线服务的安全性和完整性方面发挥着关键作用,通过防止欺诈活动并确保只有真实用户才能访问某些功能。 目录 什么是Arkose Labs挑战&a…

Python 基础 (标准库):堆 heap

1. 官方文档 heapq --- 堆队列算法 — Python 3.12.4 文档 2. 相关概念 堆 heap 是一种具体的数据结构(concrete data structures);优先级队列 priority queue 是一种抽象的数据结构(abstract data structures)&…

分布式锁(3):jedis基于Redis set命令的分布式锁

1 实现思路 获取锁的时候,使用 setnx 加锁,并使用 expire 命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的 value 值需要指定,可以根据具有业务含义,本文简化为 UUID,在释放锁的时候进行判断,避免误释放。获取锁的时候还设置一个获取的超时时间,若超过这个时间…

A34 STM32_HAL库函数 之 PCCARD通用驱动 所有函数的介绍及使用

A34 STM32_HAL库函数 之 PCCARD通用驱动 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_PCCARD_Init1.2 HAL_PCCARD_DeInit1.3 HAL_PCCARD_MspInit1.4 HAL_PCCARD_MspDeInit1.5 HAL_PCCARD_Read_ID1.6 HAL_PCCARD_Read_Sector1.7 HAL_PCCARD_Write_Sector1.8 HAL_PCCARD_Erase…

微信小程序-自定义组件checkbox

一.自定义Coponent组件 公共组件:将页面内公共的模块抽取为自定义组件,在不同页面复用。 页面组件:将复杂页面进行拆分,降低耦合度,有利于代码维护。 可以新建文件夹component放组件: 组件名为custom-che…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验3 总线型以太网的特性(广播,竞争总线,冲突)

一、实验目的 1.验证总线型以太网的特性; 2.验证广播特性; 3.验证各主机对总线的竞争使用以及可能产生的碰撞。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容…

PatchMixer:一种用于长时间序列预测的Patch混合架构

前言 《PatchMixer: A Patch-Mixing Architecture for Long-Term Time Series Forecasting》原文地址,Github开源代码地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文,并对其进行了中文翻译…

小抄 20240624

1 不要拿自己的短板和别人的长板比。 看到别人的长板,可以学习,不要因为暂时达不到而自卑,长板能成长板,都是经过长期的刻意练习才达到的。 要在认识到自己长板的基础上,以长板为主,适当补充短板&#x…

软件测试学习笔记丨JUnit5执行顺序

本文转自测试人社区,原文链接: https://ceshiren.com/t/topic/28025 指定顺序使用场景 测试用例有业务逻辑相关集成测试(主流程测试) 排序方式 方法排序类排序Suite官方网站没有明确说明默认排序的具体规则 方法排序的类型 方法排序-Order 注解指定排序 …

python中的nan是什么意思

NaN(not a number),在数学表示上表示一个无法表示的数,这里一般还会有另一个表述inf,inf和nan的不同在于,inf是一个超过浮点表示范围的浮点数(其本质仍然是一个数,只是他无穷大&…

C#语法——ref和out关键字的使用

前言 我们在C#开发中经常需要将一个参数传入一个方法,然后在方法内部改变这个参数的值,如果这个参数是引用类型,那么直接在方法中改变该参数的值,方法执行完以后该参数的值也会被改变;如果这个参数是值类型&#xff0…

利用ChatGPT优化程序员工作流程:实用案例分享

近年来,人工智能技术的迅猛发展给各行各业带来了翻天覆地的变化。作为其中的一员,程序员在工作中也受益匪浅。其中,ChatGPT的出现,更是成为优化程序员工作流程的得力助手。本文将通过多个实用案例,分享如何利用ChatGPT…

使用ChatGPT提升编程效率:程序员的最佳实践分享

在这个信息技术飞速发展的时代,编程已经成为了越来越多人的必备技能。无论你是初学者,还是经验丰富的开发者,都可能会遇到编程中的各种问题和挑战。幸运的是,AI 技术的进步让我们有了新的解决工具——ChatGPT。作为一名科技博客博…

单片机练习题7

一、填空 1、AT89S51的串行异步通信口为 (单工/半双工/全双工)。 答:全双工。 2. 串行通信波特率的单位是 。 答:bit/s 3. AT89S51的串行通信口若传送速率为每秒120帧,每帧10位,则波特率为…

Java+ffmpeg 合并两个mp4文件

使用ffmpeg测试命令 测试命令时系统要安装ffmpeg并配置环境变量:初识ffmpeg、安装配置-CSDN博客 ffmpeg -i "E:\Monitor\video_20240617_10.mp4" -i "E:\Monitor\video1_20240617_10.mp4" -filter_complex "[0:v][0:a][1:v][1:a]conc…

【面试题】Redis面试题

目录 为什么使用缓存?Redis是什么?Redis都有哪些使用场景?Redis有哪些功能?Redis支持的数据类型有哪些?Redis为什么是单线程的?Redis真的是单线程的吗?Redis同步机制是什么?Redis持久…

从零入门激光SLAM(十三)——LeGo-LOAM源码超详细解析3

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

秒的单位换算(秒,毫秒,微秒,纳秒,皮秒)

时间单位英文换算秒(s)second1s【秒】毫秒(ms)millisecond1s【秒】 1000ms【毫秒】微秒(μs)microsecond1ms【毫秒】 1000μs【微秒】纳秒(ns)nanosecond1μs【微秒】 1000ns【纳…