sheng的学习笔记-AI-多分类学习:ECOC,softmax

目录:sheng的学习笔记-AI目录-CSDN博客

基本术语:

若我们欲预测的是离散值,例如“好瓜”“坏瓜”,此类学习任务称为“分类”(classification);

若欲预测的是连续值,例如西瓜成熟度0.95、0.37,此类学习任务称为“回归”(regression)。

只涉及两个类别的“二分类”(binary classification)任务,通常称其中一个类为“正类”(positive class),另一个类为“反类”(negative class);

涉及多个类别时,则称为“多分类”(multi-class classification)任务。比如跟进图片判断图片中的水果是 苹果,梨,西瓜

多分类学习模型

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

通常称分类学习器为“分类器”(classifier)。

考虑N个类别C1,C2,...,CN,多分类学习的基本思路是“拆解法”,即将多分类任务拆为若干个二分类任务求解。

具体来说,先对问题进行拆分,然后为拆出的每个二分类任务训练一个分类器;在测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果。这里的关键是如何对多分类任务进行拆分,以及如何对多个分类器进行集成。

OvR

OvR亦称OvA(One vs.All)。最经典的拆分策略有三种:“一对一”(One vs.One,简称OvO)、“一对其余”(One vs.Rest,简称OvR)和“多对多”(Many vs.Many,简称MvM)

OvO

“一对一”(One vs.One,简称OvO)

给定数据集D={(x1,y1),(x2,y2),...,(xm,ym)},yi∈{C1,C2,...,CN}。OvO将这N个类别两两配对,从而产生N(N-1)/2个二分类任务,例如OvO将为区分类别Ci和Cj训练一个分类器,该分类器把D中的Ci类样例作为正例,Cj类样例作为反例。在测试阶段,新样本将同时提交给所有分类器,于是我们将得到N(N-1)/2个分类结果,最终结果可通过投票产生:即把被预测得最多的类别作为最终分类结果

OvR

“一对其余”(One vs.Rest,简称OvR),OvR则是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器。在测试时若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果,如图3.4所示。若有多个分类器预测为正类,则通常考虑各分类器的预测置信度,选择置信度最大的类别标记作为分类结果。说白了,如果c1,c2都是+,但c1的预测结果是0.6,c2的预测结果是0.8,那就选c2

OvO和OvR对比

OvR只需训练N个分类器,而OvO需训练N(N-1)/2个分类器,因此,OvO的存储开销和测试时间开销通常比OvR更大。但在训练时,OvR的每个分类器均使用全部训练样例,而OvO的每个分类器仅用到两个类的样例,因此,在类别很多时,OvO的训练时间开销通常比OvR更小。至于预测性能,则取决于具体的数据分布,在多数情形下两者差不多

MvM

“多对多”(Many vs.Many,简称MvM)MvM是每次将若干个类作为正类,若干个其他类作为反类。显然,OvO和OvR是MvM的特例。MvM的正、反类构造必须有特殊的设计,不能随意选取。

ECOC(一种MvM的方法)

Error Correcting Output Codes,简称ECOC,

ECOC[Dietterich and Bakiri,1995]是将编码的思想引入类别拆分,并尽可能在解码过程中具有容错性。ECOC工作过程主要分为两步:

编码:

对N个类别做M次划分,每次划分将一部分类别划为正类,一部分划为反类,从而形成一个二分类训练集;这样一共产生M个训练集,训练出M个分类器。

解码:

M个分类器分别对测试样本进行预测,这些预测标记组成一个编码。将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。类别划分通过“编码矩阵”(coding matrix)指定。

编码矩阵有多种形式,常见的主要有二元码[Dietterich and Bakiri,1995]和三元码[Allwein et al.,2000]。前者将每个类别分别指定为正类和反类,后者在正、反类之外,还可指定“停用类”。下图中a,分类器f2将C1类和C3类的样例作为正例,C2类和C4类的样例作为反例;

在图b中,分类器f4将C1类和C4类的样例作为正例,C3类的样例作为反例。在解码阶段,各分类器的预测结果联合起来形成了测试示例的编码,该编码与各类所对应的编码进行比较,将距离最小的编码所对应的类别作为预测结果。例如在图3.5(a)中,若基于欧氏距离,预测结果将是C3。

示意图

原理

测试阶段,ECOC编码对分类器的错误有一定的容忍和修正能力。例如图3.5(a)中对测试示例的正确预测编码是(-1,+1,+1,-1,+1),假设在预测时某个分类器出错了,例如f2出错从而导致了错误编码(-1,-1,+1,-1,+1),但基于这个编码仍能产生正确的最终分类结果C3。

一般来说,对同一个学习任务,ECOC编码越长,纠错能力越强。然而,编码越长,意味着所需训练的分类器越多,计算、存储开销都会增大;另一方面,对有限类别数,可能的组合数目是有限的,码长超过一定范围后就失去了意义。对同等长度的编码,理论上来说,任意两个类别之间的编码距离越远,则纠错能力越强。因此,在码长较小时可根据这个原则计算出理论最优编码。然而,码长稍大一些就难以有效地确定最优编码,事实上这是NP难问题。不过,通常我们并不需获得理论最优编码,因为非最优编码在实践中往往已能产生足够好的分类器。另一方面,并不是编码的理论性质越好,分类性能就越好

Softmax回归(Softmax regression)

Softmax回归(Softmax regression),也称为多项(Multinomial)或多类(Multi-Class)的Logistic回归,是Logistic回归在多分类问题上的推广。

假设你想识别猫,狗和小鸡,把猫加做类1,狗为类2,小鸡是类3,如果不属于以上任何一类,叫做类0。

这里显示的图片及其对应的分类就是一个例子,这幅图片上是一只小鸡,所以是类3,猫是类1,狗是类2,我猜这是一只考拉,那就是类0,下一个类3,以此类推。

softmax回归有个特别的地方:

个激活函数 需要输入一个4×1维向量,然后输出一个4×1维向量。之前,我们的激活函数都是接受单行数值输入,例如SigmoidReLu激活函数,输入一个实数,输出一个实数。Softmax激活函数的特殊之处在于,因为需要将所有可能的输出归一化,就需要输入一个向量,最后输出一个向量。

一般在多分类的输出层用softmax函数,但在训练过程中,一般用ReLu或Sigmoid

公式

在L层,在公式 z = wx + b中,假设得到结果z,设一个变量t,如下图

最后的公式是,注意,这四个值加起来等于1

在最后输出就是第一个值,最大的0.842

整体架构图:

参考资料:

书:机器学习 周志华。俗称西瓜书

吴恩达的深度学习

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

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

相关文章

蓝桥杯:矩形总面积(Java)

目录 问题描述输入格式输出格式代码实现 问题描述 平面上有个两个矩形R1和R2,它们各边都与坐标轴平行。设(x1, y1)和(x2 ,y2)依次是R1的左下角和右上角坐标,(x3, y3)和(x4, y4)依次是R2的左下角和右上角坐标,请你计算R1和R2的总面积是多少? …

Jmeter(GUI模式)详细教程

前些天,领导让我做接口的压力测试。What??我从未接触过这方面,什么都不知道,一脸蒙。于是我从学习jmeter开始入手。 现在记录下来jmeter的使用步骤,希望能对大家有所帮助。 一、安装Jmeter 1、电脑安装J…

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 这是教程中的一个函数,通过汇编来实现的。注释部分以及结合后面的讲解部分,可能还是有一点点细节的地方让初学者疑惑。我结合我自己的理解…

SAP金江、阎韶华、雷凡将出席“第四届ISIG-RPA、低代码、流程挖掘三大峰会

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(RPA中国、AIGC开放社区、LowCode低码时代)主办。大会旨在聚合每一位产业成员的力量,深入探索R…

vue router 解决路由带参数跳转时出现404问题

我的页面是从一个vue页面router跳转到另一个vue页面,并且利用windows.open() 浏览器重新创建一个页签。但是不知道为什么有时候可以有时候又不行,经过反复测试与分析,最终发现是因为有一个参数的值里包含了小数点., 小数点是浏览器合法字符,不能通过encode编码转义,于是乎…

【JavaEE初阶】 关于JVM垃圾回收

文章目录 🍃前言🎋死亡对象的判断算法🚩引用计数算法🚩可达性分析算法 🌳垃圾回收算法🚩标记-清除算法🚩复制算法🚩标记-整理算法🚩分代算法🎈哪些对象会进入…

【Neo4j系列】Neo4j之CQL语句和函数介绍

本文将对Neo4j中的CQL语句和CQL函数进行详细介绍。 作者:后端小肥肠 目录 1. 前言 2. CQL语句 2.1. CQL简介 2.2. CREATE命令 2.3. MATCH命令 2.4. RETURN命令 2.5. MATCH和RETURN 2.6. CREATEMATCHRETURN命令 2.7. 关系基础 2.8. CREATE创建标签 2.9. WH…

C/C++的内存管理与初阶模板

引言 我们在学习C的时候,会经常在堆上申请空间,所以这个时候就体现了内存管理遍历。 图下是我们常见的计算机的内存划分: 我也在图下对部分变量存在的位置,及时标注。(如果有任何问题可以联系博主修改,感谢大家。) 那…

VSCode搭建ARM开发环境

为了构建Cortex M系列单片机免费开源的开发环境,网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式,下面记录环境搭建的流程。 我这边的PC环境为 WIN7专业版64bit。 需要用到的工具 Visual Studio CodeSTM32CubemxARM GCC 交叉编译工具链&#x…

容器安全是什么?

容器安全定义 容器安全是指保护容器的完整性。这包括从其保管的应用到其所依赖的基础架构等全部内容。容器安全需要完整且持续。通常而言,企业拥有持续的容器安全涵盖两方面: 保护容器流水线和应用保护容器部署环境和基础架构 如何将安全内置于容器流…

C/C++游戏逆向

初级 %p、size_t、%zd、%llu、sizeof %p用于输出地址,HWND类型的也可以使用%p输出size_t:C语言源代码:typedef unsigned __int64 size_t;sizeof 返回值是 size_t类型,打印的时候不能使用%d,应该使用%zu 修改窗口标题…

API可视化编排,提高API可复用率

在数字化时代,API(应用程序编程接口)已成为不同软件应用之间沟通的桥梁。然而,如何高效管理、编排和复用这些API,成为了企业和开发者面临的重要挑战。随着技术的不断进步,RestCloud API可视化编排应运而生&…