纠错输出编码(Error-Correcting Output Codes: ECOC)

2023-11-07

最近在利用Error-Correcting Output Codes做论文,发现网上没有一种讲的比较清楚的,那我今天就花点时间大致上讲一下这种方法。最初提出ECOC方法的是如下的文章

Solving Multiclass Learning Problems via Error-Correcting Output Codes --Thomas G. Dietterich, Ghulum Bakiri

ECOC与One-vs-One(OvO)和One-vs-ALL(OvA)一样属于将多分类分解为二分类问题的分而治之(Divide and Conquer)的方法,并且也可以将ECOC理解为一种OvO和OvA经过推广过后的方法。我这里引用下面文章中的例子来说明这个问题

Reducing Multiclass to Binary: A Unifying Approach for Margin Classifiers --Erin L. Allwein, Robert E. Schapire,
Yoram Singe

1. 问题描述

给定:

  1. 多分类数据
    例如:预测孩子们最喜欢的颜色
    在这里插入图片描述

  2. 二分类学习算法 A
    在这里插入图片描述

目标: 利用二分类学习算法构建对于多分类数据的分类器
在这里插入图片描述

2. 一对多方法(OvA)

2.1 分解问题

将一个k-分类问题分解为k个二分类问题并且分别解决他们
在这里插入图片描述

2.2 怎样结合预测结果

  • 一列一列评估,并且希望只有一个是 +
  • 例如如果 h 1 ( x ) = h 2 ( x ) = h 4 ( x ) = − h_1(x) = h_2(x) = h_4(x) = - h1(x)=h2(x)=h4(x)= 并且 h 3 ( x ) = + h_3(x) = + h3(x)=+然后预测为 红色

2.3 问题

如果仅有一个 h h h是错的,最终的预测结果就会出错

3.一对一方法(OvO)

3.1 分解问题

为每一对类别创造一个二分类器
在这里插入图片描述

3.2 预测阶段:

一种方法是可以利用voting的方法。即分别用这些分类器预测,计算每个种类的得票数,最终选取得票数最高的

3.3 问题和优点:

  • 在预测阶段如何结合所有分类器的结果不是很显著的
  • 可以达到很高的精度,训练速度甚至快于OvA方法

4. 纠错输出编码(ECOC)

4.1分解问题

  1. 设计编码矩阵(“Coding” Matrix)M,并且根据M分解为若干个二分类问题(二分类问题的个数 d d d 事实上等于M的长度)

设计的方法是值得研究的话题,有文章表明是一个NP难问题。在最初的文章中作者给了几种方法;例如k不大的时候可以使用穷举编码,在k大的时候可以使用随机编码等;并且分类器个数 = 矩阵长度 d d d满足
l o g 2 k ≤ L ≤ 2 k − 1 − 1 , L ∈ Z log_2 k \leq L \leq 2^{k-1} -1, L \in \mathbb{Z} log2kL2k11,LZ
最短是最少的二分类问题个数,是对数数量级的。最多的情况是穷举,是指数数量级的

  1. M的每行为这个类别的编码
    例如绿色的编码为 ( + , − , + , − , + ) (+, -, +, -, +) (+,,+,,+)
    在这里插入图片描述

4.2 预测阶段

计算hamming distance,每个预测值也有相应的五位编码,分别与每一类的编码比对,有几位不一样hamming distance就是几,最小的那一类就是我们的预测值(最相似的一行)。

  • 例如 h ( x ) = < − , + , + , + , − > \mathbf{h}(x) = <-, +, +, +, -> h(x)=<,+,+,+,>然后预测为蓝色(hamming distance 分别为(绿色:4 黄色:2 红色:3 蓝色:1))
    在这里插入图片描述

4.3 问题和优点

  • 如果M的行与行差别很大,那么对错误就会有很高的鲁棒性。如果任意两行之间最小的距离是 L L L,可以容忍的错误是 L − 1 2 \frac{L-1}{2} 2L1向下取整,仍然可以保证正确的类是最小的Hamming距离
  • 在类别数k大的时候可能运行的更快
  • 缺点:二分类问题不是很自然并且难以解决

4.4 推广方法

4.4.1 分解问题

M可以由 { − 1 , 0 , + 1 } \{-1, 0, +1\} {1,0,+1}构成,其中0表示在这个二分类问题中该类不予考虑。
在这里插入图片描述

4.4.2 推广方法的预测阶段

在这里插入图片描述

4.4.3 问题及优势

因此上面的三种都可以用这种矩阵方法表示,在矩阵的选择上有一些平衡,比如

  • 增加0会使得问题趋向于简单和快速训练,但是会增加二分类器的训练误差
  • 行之间差距大会使得分类器鲁棒性更高,但是会导致二分类问题变得更加难以解决

5. 预测阶段

上面的方法是基于Voting或者是Hamming Distance 的,一种推广的decoding方法可以基于边际差距(Margin-based)或者说是Loss-based。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

纠错输出编码(Error-Correcting Output Codes: ECOC) 的相关文章

随机推荐

  • python中如何统计文本中的单词个数_python统计文本文件内单词数量的方法

    本文实例讲述了python统计文本文件内单词数量的方法 分享给大家供大家参考 具体实现方法如下 count lines sentences and words of a text file set all the counters to z
  • 大数据课程I1——Kafka的概述

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 了解Kafka的概念 掌握Kafka的配置与启动 一 简介 1 基本概念 Apache kafka 是一个分布式数据流平台 可以从如下几个层面来理解 1 我们
  • 安装office2010失败,提示因为安装了office2010早期试用版本或在安装过程中出错

    昨天下午 一个同学说他要考全国计算机二级考试 需要安装office2010进行做操作题目 但是怎么弄也不能安装上 就连上课老师也安装不了 还告诉他需要换一个系统才能够进行安装 后来她找到了我 请我帮他解决一下 我毫不犹豫的答应了 我拿到电脑
  • [H5] Canvas画布的使用详解:

    Canvas 序言 在渲染复杂的动效 把数据可视化图形显示 游戏场景等需求 都会用canvas技术 比dom操作性能更高 特点 H5新增的图形标签 通过提供的JavaScript函数绘制各种图表或利用算法实际非常华丽的动效 在以前是用Fla
  • 解决AttributeError: 'set' object has no attribute 'items'错误

    出现这个问题 原因可能是定义的header有问题 header key value 如果是直接在请求数据中复制 很有可能会忽略键和值的冒号
  • 计算机二级换c语言,09年计算机二级C语言辅导:C技巧(内存分配:更换策略,不要为难内存)...

    09年计算机二级C语言辅导 C技巧 内存分配 更换策略 不要为难内存 分类 计算机等级 更新时间 2008 11 21 来源 教育联展网 在32位机上 64位也是一样的 但是空间大很多 一个进程可以分配到4GB的虚拟内存 当然 其中2G给了
  • 应用 Valgrind 定位 Linux 程序的内存问题

    参考文章 Valgrind学习总结 应用 Valgrind 发现 Linux 程序的内存问题 Valgrind介绍 Valgrind是一套Linux下 开放源代码 GPL V2 的仿真调试工具的集合 Valgrind由内核 core 以及基
  • [Typescript]基础篇之 String 对象

    基础篇之 String 对象 String 对象简介 与 string 区别 String 定义 属性 方法 属性的使用 方法的使用 lastIndexOf localeCompare replace search slice split
  • matlab学习笔记1

    1 常见用法 1 创建匿名函数 返回该函数句柄 输入参数 表达式 fun x 100 x 2 x 1 2 2 1 x 1 2 定义了一个函数 2 给函数名取别名 函数名 还有其他用法 可参考 https blog csdn net kaev
  • Altium Designer 20中创建网络类、隐藏网络连线

    我们平时在PCB布局的时候不需要电源和地的连线 我们只需要信号的流向 所以我们需要添加一个电源类 来隐藏电源和地的连线 那么 我们如何创建一个类呢 Step 01 使用快捷键DC 调出对象类浏览器 Step 02 Net Classes右击
  • 3W字长文总结PyTorch中常用的函数

    quad quad PyTorch基本函数更新 quad q
  • 程序开发性能调优之如何降低CPU使用率。

    单核的CUP就100 双核的就60 这谁受的了 咋调都不行 我把所有的效果都关了 还不行 连声音都关了 就剩个窗口模式了 他照样100 咋整啊 改用静态的方式的确是能够大大降低数据库的存取频率 进而降低CPU的使用率 依你所表述的情况来看
  • 谈谈softmax中常出现的温度系数 T (τ)

    2022 4 1 今天再回首来看这篇文章 发现自己写的非常局限 并且基本是在拾人牙慧 缺乏自己的思考与提炼 在阅读了更多文章和做实验进行一些思考之后 重写了这篇博客 主要从对比学习 知识蒸馏 分类训练来谈谈自己对于温度系数的理解 前因 许多
  • [前端]ztree树形菜单在dialog中应用时遇到的坑

    前言 好久没更新了 最近工作时遇到这样一个坑 可苦恼死我了 如果你们遇到同样的问题 可参考一下 同一个组件 也就是dialog中含有ztree 多个地方同时调用 第一次在一个页面打开 ztree可以正常渲染出数据 在第二个页面打开后 ztr
  • (2)STM32+ESP8266+手机网络助手实现AP模式通信

    文章目录 1 实验目的及资源 1 1 目的 1 2 资源 2 串口调试wifi模块 2 1 接线 2 2 AT指令测试 2 3 与手机app通信 3 STM32通过wifi与手机app通信 3 1 使用资源 3 2 串口3初始化 3 3 e
  • git pull origin master 时, 遇到 fatal: refusing to merge unrelated histories 230626

    git pull origin master 时 遇到 fatal refusing to merge unrelated histories 230626 解决办法 加 allow unrelated histories allow un
  • 设计模式(1)-工厂模式

    工厂模式可以将其分为三种 1 简单工厂模式 2 工厂方法模式 3 抽象工厂模式 下面我们一个一个来说 一 简单工厂模式 简单工厂模式 或称静态工厂方法模式 是类的创建模式 简单工厂模式是由一个 工厂对象根据收到的消息决定要创建哪一个类的对象
  • 利用GitHub Actions实现将GitHub代码同步到Gitee

    利用 Github Action 实现将 Github 上面的代码同步到 Gitee 中 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中 所以我们需要以下几个步骤 生成 SSH 公私钥
  • 数组实现队列(详细)

    我们都知道 队列是一种先进先出的数据结构 每当有人问你队列是什么 你的回答就是 一种先进先出的数据结构 当然这样的回答也是完全没有错的 它就是一种先进先出的数据结构 为什么我们不能描述的多一点呢 更详细一点 下面我们就来详细的描述一下队列
  • 纠错输出编码(Error-Correcting Output Codes: ECOC)

    最近在利用Error Correcting Output Codes做论文 发现网上没有一种讲的比较清楚的 那我今天就花点时间大致上讲一下这种方法 最初提出ECOC方法的是如下的文章 Solving Multiclass Learning