逻辑回归、支持向量机等机器学习算法可以对二元数据集进行分类,但是无法处理超过 2 个目标类标签的多类分类任务。对于多类分类或多标签分类任务,我们需要使用某些技巧或者其他机器学习算法来训练数据集。

One-vs-One 和 One-vs-Rest 是两种可以处理多类或多标签分类任务的技术。 One-vs-Rest 分类器为目标类标签总数为“c”的数据训练“c”个分类器,每个分类器只适配一个类并将所有其他类分成其他类(变成二分类)。而One-vs-One分类器为每个类训练匹配一个分类器。在预测时进行投票,收到最多投票的类就是输出。Error-correcting output code(ECOC) 与 OvO 和 OvR 分类器有很大不同。在本文中,我们将讨论 ECOC 的内部工作原理以及如何使用它来训练多类分类任务的模型。

如果对One-vs-One 和 One-vs-Rest 不太了解,请先查看本文最后提供的Sklearn文档。

什么是ECOC?

ECOC,即Error Correcting Output Codes,这里暂时翻译成“纠错输出码”。它是一种最常用的MvM技术(many vs. many多对多),可以用来将 Multiclass Classification 问题转化为 Binary Classification 问题。

ECOC的思想是将机器学习问题看做数据通信问题,并采用纠错输出码对各类别进行编码,因此在分类过程中能够纠正某些二分器的错误输出,从而提高分类器的预测精度。

ECOC 将多类目标类标签预处理为二进制代码(0 和 1 的数组)。 使用这种策略,目标类标签在二进制代码的欧几里得空间中表示,并使用码表来记录编码的对应关系。

上图显示了 10 类目标标签的 15 位编码。 每个目标标签都分配有唯一的 15 位编码。 码表矩阵可以记录每个目标类的位编码。

开发人员可以控制位编码的维度。 如果位编码的维数大于目标类标签的基数,那么一些分类器的预测可以被其他分类器纠正。 在这种情况下,要训练的分类器数量会比 One-vs-Rest 多。

如果我们保持位编码的维度小于目标类标签的基数,那么它训练的分类器比 one-vs-rest 分类器少。 理论上,log2(n_classes) 足以明确表示目标类标签。 对于 10 类目标标签 log2(10)=4 就可以了。

在对目标类标签进行d维编码后,需要匹配数量为’ d '个的分类器,每个编码位对应一个二元分类器。在预测时,利用分类器在类空间中投影新点,并选择最接近点的类。

代码实现

Scikit-learn包附带了一个OutputCodeClassifier()函数,它用一行Python代码提供了ECOC分类器的实现。参数code_size可用于确定目标类的位编码。0到1之间的值可以用来压缩模型,或者code_size > 1可以使模型对于错误更加健壮。

code_size是一个超参数,可以进行调优:

0 < code_size < 1:训练一个压缩模型,其中拟合的估计器数量小于One-vs-Rest分类器的情况。

code_size>1:训练一个能够进行错误修正模型,对错误更加健壮。所拟合的估计量比在one vs- rest分类器的情况下要多。

from sklearn.linear_model import LogisticRegression
from sklearn.multiclass import OutputCodeClassifiermodel = LogisticRegression(random_state=42)
ecoc = OutputCodeClassifier(model, code_size=5, random_state=42).fit(X_train, y_train)y_pred = ecoc.predict(X_test)

可以对超参数code_size进行调优,以更改目标类嵌入的维度。我使用OutputCodeClassifier训练了一个20类分类数据集,并用Logistic回归模型作为基本分类器。

从上面的分布图中,我们可以观察到性能指标的增加,然后趋于平缓。代码大小= 10的值可以看作是一个阈值。对于代码大小= 10,我们得到了25.9%的准确率,27.3%的精度和26.5%的召回率。进一步增加嵌入维数对模型的性能没有影响。

总结

OutputCodeClassifier是一个方便的函数,用于适应实现ECOC算法进行多分类任务。我们可以控制分类器的数量,这是相对于One-vs-One或One-vs-Rest技术的一个额外优势(在这些技术中,分类器的数量依赖于目标类的基数)。

模型的性能取决于基本分类器的数量。理论上,log2(n_classes)足以明确地表示目标类,但它可能不会产生一个健壮的模型,因此我们需要增加它大小以便训练出更健壮的模型。

最后Sklearn文档如下:

https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OutputCodeClassifier.html

https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsOneClassifier.html

https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html

作者:Satyam Kumar

使用ECOC编码提高多分类任务的性能相关推荐

  1. hssfcell判断文本类型_ICML 2020 | 显式引入对分类标签的描述,如何提高文本分类的效果?...

    本文介绍的是ICML2020论文<Description Based Text Classification with Reinforcement Learning>,论文作者来自香侬科技 ...

  2. CML 2020 | 显式引入对分类标签的描述,如何提高文本分类的效果?

    论文链接:https://arxiv.org/pdf/2002.03067.pdf 1 简介 一般来说,模型越深效果越好.但是同时,模型越深也更难训练--即无法收敛到训练集上一个好的值. 今天,我们给 ...

  3. 计算机论文分类号 tp,论文编码(原论文分类号):TP39.doc

    论文编码(原论文分类号):TP39 论文编码(原论文分类号):TP39 论文编码(原论文分类号):TP39 首都师范大学本科毕业论文 红外热波检测中的图像 匹配研究 The research on i ...

  4. 【论文泛读180】反向翻译任务自适应预训练:提高文本分类的准确性和鲁棒性

    贴一下汇总贴:论文阅读记录 论文链接:<Back-Translated Task Adaptive Pretraining: Improving Accuracy and Robustness ...

  5. 企业网络推广下微软服务器浸泡于液体试图提高服务器的散热与性能

    众所周知,随着互联网时代的飞速发展,服务器市场也得到庇荫,当下的互联网科技公司哪家还没有几台服务器了?互联网科技公司需要的大数据与计算大部分都是通过服务器来进行的,而为了防止服务器崩溃也要估计到其自身 ...

  6. 分类模型的性能评价指标(Classification Model Performance Evaluation Metric)

    二分类模型的预测结果分为四种情况(正类为1,反类为0): TP(True Positive):预测为正类,且预测正确(真实为1,预测也为1) FP(False Positive):预测为正类,但预测错 ...

  7. 分类模型的性能评估——以SAS Logistic回归为例(3): Lift和Gain

    书接前文.跟ROC类似,Lift(提升)和Gain(增益)也一样能简单地从以前的Confusion Matrix以及Sensitivity.Specificity等信息中推导而来,也有跟一个basel ...

  8. 分类模型的性能评估——以SAS Logistic回归为例(2): ROC和AUC

    ROC 上回我们提到,ROC曲线就是不同的阈值下,以下两个变量的组合(如果对Sensitivity和Specificity两个术语没有概念,不妨返回,<分类模型的性能评估--以SAS Logis ...

  9. 【选摘】如何提高月结事务的性能

    如何提高月结事务的性能 -内容整理转自<由浅入深学习SAP财务> 某些企业在使用SAP 多年之后会发现系统的性能差,主要体现在月结的某些步骤执行起来会越来越慢,比如生产订单结算" ...

最新文章

  1. How to list/dump dm thin pool metadata device?
  2. Python的集合set
  3. 一步步编写操作系统 57 门、调用门与RPL序 2
  4. Maven学习总结(52)——Maven 配置文件密码加密机制使用说明
  5. [论文阅读] Scene Context-Aware Salient Object Detection
  6. 使用Microsoft Word中“多级列表”功能定制文档标题的方法
  7. java ee 设计模式_Java EE 设计模式解析与应用_源雷技术空间
  8. Python计算水仙花数
  9. 希尔伯特谱、边际谱、包络谱、瞬时频率/幅值/相位——Hilbert分析衍生方法及MATLAB实现
  10. 【PaddlePaddle论文复现】LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS阅读心得
  11. 关闭内核printk打印
  12. 电脑无法加载 reCaptcha 的解决方案
  13. luogu P1332 血色先锋队
  14. 获取android软键盘高度
  15. 数据库实验报告【太原理工大学】
  16. ng-alain的sf如何自定义部件
  17. 服务器状态变更怎么消音,音频编辑大师消音教程 消除人声就是这么简单
  18. 外网怎么连接3389远程桌面
  19. Linux buffer/cache解读
  20. GPIO配置及解读(STM32CubeMx)

热门文章

  1. 图像处理实例--基于分水岭分割进行肺癌判断
  2. Chapter2.2 管理Ansible配置文件
  3. 5G环保数采仪在大气污染环境监测中的应用
  4. 加速清洁能源时代到来,芯讯通助力智能电网建设
  5. 2022-2027(新版)中国高温硫化硅橡胶行业产销状况与需求规模预测报告
  6. 【论文解读 ICDM 2019 | MVNN】Exploiting Multi-domain Visual Information for Fake News Detection
  7. 基于openlayer4实现多个popu展示
  8. Sandstorm 建设者亮点——2023 年 2 月
  9. 冲击蓝桥杯-并查集,前缀和,字符串
  10. 分享一款功能强大的win7免费语音朗读软件