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

devtools/2024/9/25 7:39:28/

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个训练

http://www.ppmy.cn/devtools/22971.html

相关文章

【Stable Diffusion系列】(一):AI绘画本地部署教程

目录 一、总览 二、本地部署 1、安装cuda 2、安装python 3、安装git 4、方法一 1)获取安装包 2)update 3)run 5、方法二 1)git clone 2)双击webui-user.bat 3)更新 6、设置启动参数 7、…

SQLite的DBSTAT 虚拟表(三十六)

返回:SQLite—系列文章目录 上一篇:SQLite运行时可加载扩展(三十五) 下一篇:SQLite—系列文章目录 1. 概述 DBSTAT 虚拟表是一个只读的同名虚拟表,返回 有关用于存储内容的磁盘空间量的信息 的 SQLite 数据库。 示例用例…

《QT实用小工具·四十五》可以在界面上游泳的小鱼

1、概述 源码放在文章末尾 该项目实现了灵动的小鱼&#xff0c;可以在界面上跟随鼠标点击自由的游泳&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "magicfish.h" #include <QtMath> #include <QPainter>…

【Vue+ElementUI】el-table动态高度设置及表格内容错乱对不齐

在Vue中使用ElementUI的el-table标签会遇到以下问题 一、遇到页面切换时&#xff0c;表格内容错乱&#xff08;对不齐&#xff09;&#xff1a;doLayout() 二、动态计算表格高度&#xff1a;getTableMaxHeight() 页面结构&#xff1a;搜索框表格&#xff0c;通常会在表格内部…

3分钟了解拍摄VR全景需要哪些硬件

VR全景图片是一张水平方向360度&#xff0c;垂直方向180度&#xff0c; 图片尺寸宽高比为2:1的图片。 通过720yun APP或720yun官网上传生成全景H5页面&#xff0c;即可360度全方位观看画面中的景象。 拍摄VR全景有很多方法&#xff0c;下面介绍用单反相机、全景相机、智能手机…

Linux tcp/ip 网路协议栈学习-00 前言

Linux tcp/ip 网路协议栈学习-00 前言 目录 Linux tcp/ip 网路协议栈学习-00 前言 (1)预备知识 (2)前置知识 (3)学习目标 (4)总结 (1)预备知识 好工具事半功倍&#xff0c;做任何事情都需要有方法和工具&#xff0c;同样&#xff0c;阅读 Linux 内核源码也是如此…

python代码实现支持向量机对鸢尾花分类

1、导入支持向量机模型&#xff0c;划分数据集 from sklearn import datasets from sklearn import svmirisdatasets.load_iris() iris_xiris.data iris_yiris.target indices np.random.permutation(len(iris_x)) iris_x_train iris_x[indices[:-10]] iris_y_train iris_y…

HTTP:强缓存优化实践

强缓存&#xff1a;浏览器不会向服务器发送任何请求&#xff0c;直接从本地缓存中读取文件 强缓存是指浏览器在向服务器请求资源时&#xff0c;判断本地是否存在该资源的缓存&#xff0c;并判断是否过期。 如果本地缓存未过期&#xff0c;浏览器就直接使用本地缓存&#xff0c…