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

具体来说,有以下三种策略:

一、一对一 (OvO)

假如某个分类中有N个类别,我们将这N个类别进行两两配对(两两配对后转化为二分类问题)。那么我们可以得到个二分类器。(简单解释一下,相当于在N个类别里面抽2个)

之后,在测试阶段,我们把新样本交给这个二分类器。于是我们可以得到个分类结果。把预测的最多的类别作为预测的结果。

下面,我给一个具体的例子来理解一下。

上图的意思其实很明显,首先把类别两两组合(6种组合)。组合完之后,其中一个类别作为正类,另一个作为负类(这个正负只是相对而言,目的是转化为二分类)。然后对每个二分类器进行训练。可以得到6个二分类器。然后把测试样本在6个二分类器上面进行预测。从结果上可以看到,类别1被预测的最多,故测试样本属于类别1。

二、一对其余 (OvR)

一对其余其实更加好理解,每次将一个类别作为正类,其余类别作为负类。此时共有(N个分类器)。在测试的时候若仅有一个分类器预测为正类,则对应的类别标记为最终的分类结果。例如下面这个例子。

大概解释一下,就是有当有4个类别的时候,每次把其中一个类别作为正类别,其余作为负类别,共有4种组合,对于这4中组合进行分类器的训练,我们可以得到4个分类器。对于测试样本,放进4个分类器进行预测,仅有一个分类器预测为正类,于是取这个分类器的结果作为预测结果,分类器2预测的结果是类别2,于是这个样本便属于类别2。

其实,有人会有疑问,那么预测为负类的分类器就不用管了吗?是的,因为预测为负类的时候有多种可能,无法确定,只有预测为正类的时候才能唯一确定属于哪一类。比如对于分类器3,分类结果是负类,但是负类有类别1,类别2,类别4三种,到底属于哪一种?


 OvO和OvR有何优缺点?

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

综上:

OvO的优点是,在类别很多时,训练时间要比OvR少。缺点是,分类器个数多。

OvR的优点是,分类器个数少,存储开销和测试时间比OvO少。缺点是,类别很多时,训练时间长。


三、多对多(MvM)

MvM是每次将若干个类作为正类,若干个其他类作为反类。显然,OvO和OvR是MvM的特例。MvM的正、反类构造必须有特殊的设计,不能随意选取。这里我们介绍一种最常用的MvM技术"纠错输出码" (Error Correcting Output Codes,简称 ECOC)

ECOC是将编码的思想引入类别拆分,并尽可能在解码过程中具有容错性。ECOC工作过程主要分为两步:
        ----编码:对N个类别做M次划分,每次划分将一部分类别划为正类,一部分划为反类,从而形成一个二分类训练集。这样一共产生M个训练集,可训练出M个分类器。
        ----解码:M 个分类器分别对测试样本进行预测,这些预测标记组成一个编码。将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。

类别划分通过"编码矩阵"指定。编码矩阵有多种形式,常见的主要有二元码和三元码。前者将每个类别分别指定为正类和反类,后者在正、反类之外,还可指定"停用类"。图3.5给出了一个示意图,在图 3.5(a) 中,分类器f2将Cl类和C3类的样例作为正例,C2类和C4类的样例作为反例;在图3.5(b)中,分类器f4将C1类和C4类的样例作为正例,C3 类的样例作为反例。在解码阶段,各分类器的预测结果联合起来形成了测试示例的编码,该编码与各类所对应的编码进行比较,将距离最小的编码所对应的类别作为预测结果。

例如在图 3.5(a) 中,若基于欧式距离,预测结果将是 C3。也就是一个测试样本,经过分类器f1,f2,f3,f4,f5分别预测成了(-1,-1,+1,-1,+1),与C1相比较,海明距离为0+1+1+1+0=3,欧式距离为,对C2,C3,C4都进行比较即可。

为什么称为"纠错输出码"呢?

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

EOCO编码长度越长,纠错能力越强,那长度越长越好吗?

NO!编码越长,意味着所需训练的分类器越多,计算、存储开销都会增大;另一方面,对有限类别数,可能的组合数目是有限的,码长超过一定范围后就失去了意义。

对同等长度的编码,理论上来说,任意两个类别之间的编码距离越远,则纠错能力越强。因此,在码长较小时可根据这个原则计算出理论最优编码。然而,码长稍大一些就难以有效地确定最优编码,事实上这是 NP 难问题。不过,通常我们并不需获得理论最优编码,因为非最优编码在实践中往往己能产生足够好的分类器。另一方面,并不是编码的理论性质越好,分类性能就越好,因为机器学习问题涉及很多因素,例如将多个类拆解为两个“类别子集”,不同拆解方式所形成的两个类别子集的区分难度往往不同,即其导致的二分类问题的难度不同。于是一个理论纠错牲质很好、但导致的二分类问题较难的编码,与另一个理论纠错性质差一些、但导致的二分类问题较简单的编码,最终产生的模型性能孰强孰弱很难说。

参考文献:

https://blog.csdn.net/u012679707/article/details/80527994

https://blog.csdn.net/anshuai_aw1/article/details/82902853

机器学习中的多分类任务详解相关推荐

  1. 机器学习中【回归算法】详解

    关注微信公众号[Microstrong],我写过四年Android代码,了解前端.熟悉后台,现在研究方向是机器学习.深度学习!一起来学习,一起来进步,一起来交流吧! 本文同步更新在我的微信公众号里,地 ...

  2. kmeans python interation flag_机器学习经典算法-logistic回归代码详解

    一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...

  3. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  4. php mysql无限_php+mysql实现无限分类实例详解

    php+mysql实现无限分类实例详解 fenlei($arr[$i][0]);   //$arr[$i][1]表示第$i+1个分类的id的值.进行递归,也就是把自己的id作为f_id参数把自己的子类 ...

  5. python labelencoder参数_对python 数据处理中的LabelEncoder 和 OneHotEncoder详解

    python 怎么读取 Label 里面的值 #简单来说 LabelEncoder 是对不连续的数字或者文本进行编号 from sklearn.preprocessing import LabelEn ...

  6. Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解

    Keras深度学习实战(4)--深度学习中常用激活函数和损失函数详解 常用激活函数 Sigmoid 激活函数 Tanh 激活函数 ReLU 激活函数 线性激活函数 Softmax 激活函数 损失函数 ...

  7. 原创:Spark中GraphX图运算pregel详解

    原创:Spark中GraphX图运算pregel详解 由于本人文字表达能力不足,还是多多以代码形式表述,首先展示测试代码,然后解释: package com.txq.spark.test import ...

  8. Tensorflow 2.x(keras)源码详解之第十二章:keras中的损失函数之BinaryCrossentropy详解

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  9. Java引用类型分类以及详解

    Java引用类型分类以及详解 - Java引用类型概述 在JVM之中再好的算法,也敌不过一个好烂的程序员.一个程序要想写好有两点:按照开发标准进行.请写有用代码. 而对于垃圾的产生与回收的处理之中,要 ...

  10. Android中联系人和通话记录详解(2)

    在文章Android中联系人和通话记录详解(1)中对通话记录进行了分析,本章将对联系人的数据库表.字段以及Insert,Query,Delelte,Update四大基本数据操作进行分析. 与联系人相关 ...

最新文章

  1. [转] python运行时内存分析工具meliae
  2. OpenLayers 3+Geoserver+PostGIS实现点击查询
  3. Redhat Linux通过RPM安装搭建LAMP环境
  4. 你发这些什么目的_吸引女生冷知识:朋友圈发照片的“潜规则”,男生要懂
  5. eclipse launching workspace太慢的解决方法
  6. Nova Suspend/Rescue 操作详解 - 每天5分钟玩转 OpenStack(35)
  7. python开发飞船游戏
  8. 【R语言实用技巧】类别变量的顺序自定义设置
  9. 【持续更新】Eclipse使用教程
  10. 百度云盘批量转存工具使用教程
  11. 隐藏IP地址的三种方法
  12. 信息的载体依附性_信息的一般特征是载体依附性
  13. IEEE论文参考文献格式(bib)
  14. 我只是一只大本钟[铛铛铛]
  15. 2021年西式面点师(中级)报名考试及西式面点师(中级)证考试
  16. 01.14_学习Java的day23(详解)
  17. 深入浅出学K8s - 详解K8s的网络模型
  18. Vue-cli使用prerender-spa-plugin插件预渲染
  19. 怎么将CAD图纸转换成高清晰度PNG格式怎么操作?
  20. P1216 数字金字塔

热门文章

  1. 这是历史上程序员被黑的最惨的一次,原谅我发出了杀猪般的笑声!
  2. JSON 在线格式化工具感觉挺好用的
  3. 阿里天池--宫颈癌检测(基于fastRCNN)新手初次尝试
  4. Android离线输入法,QQ输入法Android版4.9离线语音输入让沟通无障碍
  5. FJUT 3097(hdu 3333) 区间种类数 主席树+在线
  6. 电力监控服务器维修,地铁电力监控系统(PSCADA)发生故障应该如何处理
  7. pygame实现打飞机小游戏
  8. Canon LBP 2900 Mac 10.11 驱动安装
  9. uno牌的玩法图解_UNO基本玩法和技巧
  10. Temporal Action Detection with Multi-level Supervision UFA论文阅读笔记