《机器学习by周志华》学习笔记-线性模型-03

2024-04-29 13:04

本文主要是介绍《机器学习by周志华》学习笔记-线性模型-03,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、多分类学习

1.1、背景

我们在上一节介绍了「线性判别分析(LDA)」,LDA的从二分类任务可以推广到多分类任务中。

而现实中常遇到的多分类学习任务。有些二分类的学习方法可以直接推广到多分类,但是更多情况下是基于一些策略,利用二分类学习器来解决多分类的问题。

1.2、概念

我们通常将「分类学习器」简称「分类器(classifier)」,多个「分类器」的集成使用,则称为「集成学习」。

一般的,分类器使用「多分类学习」的方法来完成分类任务。本章主要介绍了「多分类学习」的方法。

1.3、基本思路

「多分类学习」的基本思路是「拆解法」,即将「多分类任务」拆成「若干个二分类任务」求解。

具体来说就是:

  • 先对问题进行拆分;
  • 然后为「拆出的每个二分类任务」训练出一个「分类器」;
  • 最后对这些分类器进行「集成使用」;

在测试时,对这些分类器的预测结果进行集成,获得最终的多分类结果。这里的关键如下:

  • 如何对多分类任务进行拆分
  • 如何对多个分类器进行集成

1.4、拆分策略

给定m个示例的数据集D有n个类别,y是其所有示例的真实标记,所有类别集合用C表示,则:

D=\left \{ (x_{1} ,y_{1} ),(x_{2} ,y_{2} ),...,(x_{m} ,y_{m} )\right \}

C=\left \{ C_{1},C_{2},...,C_{n} \right \}

yi\in C

常见的拆分策略有三种:

  • 一对一(One vs.One,简称OvO)
  • 一对其余(One vs.Rest,简称OvR):亦称OvA(One vs.All),但OvA这个说法不严格,因为不可能把“所有类”作为反类。
  • 多对多(Many vs.Many,简称MvM)

后面我们将详细介绍这三种拆分策略。

1.4.1、一对一(OvO)

首先,将n个类别「两两配对」,从而产生\hat{n}个二分类任务,即\hat{n}个二分类器。

\hat{n}=C_{n}^{2}=\frac{A_{n}^{2}}{A_{2}^{2}}=\frac{n\times (n-1)}{2\times 1}= \frac{n(n-1)}{2}

其次,每个二分类任务,都C_{i}表示正例,C_{j}表示反例。

再次,将D的所有m个样本同时提交给\hat{n}个二分类器。

最后,结果通过投票产生,即把被预测的最多的类别作为最终分类结果。

如下图所示:

1.4.2、一对其余(OvR)

首先,每次将一个类的样例作为正例、其余的类作为反例来训练,从而产生n次训练任务、n个二分类器以及预测结果。

其次,将D的所有m个样本同时提交给n个二分类器。

最后,分情况选择分类结果:

  • 当只有一个分类器预测为正例,则对应类别就是分类结果,例如下图的C3
  • 当有多个分类器预测为正例,则考虑每个分类器预测的置信度,选择最大的类别作为分类结果。

OvO与OvR对比:

对比类别OvOOvR分析
训练分类器个数nn(n-1)/2OvO的存储开销、测试(训练)时间较大。
每个分类器训练样例数2个类别的样例n个类别的样例在类别很多的时候,OvO的测试(训练)时间、开销更小。
预测性能//依赖于二者的数据分布,多数情况都差不多。

1.4.3、多对多(MvM)

就是将若干个类的样例作为「正例」,其他类的样例作为「反例」。其构造必须有特殊的设计,不能随意选取。

OvO和OvR是MvM的一种拆分方式,属于MvM的特例。

我们会在下面介绍一种常用的选取技术「纠错输出码(Error Correcting Output Codes,简称ECOC)」,它是将编码的思维引入类别拆分,并尽可能在编码过程中具有容错性,其工作主要分为以下2步:

第一步:编码

  • 对n个类别做m次划分,每次划分将一部分类别划分为「正类」,另一部分为「反类」,从而形成一个二分类训练集。
  • 一共产生m个训练

这篇关于《机器学习by周志华》学习笔记-线性模型-03的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946158

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应