机器学习中的多标签分类

机器学习中的多标签分类多标签分类的算法 通常改变算法或数据 最常用的方法如下 改造成二分类比如 y 标签一共有 L 个分类 那么就建立 L 个分类器 分别对应 L 个分类标签 进行训练 标签排序 二分类使用 成对比较 pairwisecomp 获得 L L 1 2 个分类器 在训练这些分类器后 利用投票方式得到标签的排序 然后 利用二分类来对标签排序的投票结果进行补充 提高准确性 随机 k 标签从

标签分类的算法,通常改变算法或数据,最常用的方法如下:

改造成二分类

比如,y标签一共有L个分类,那么就建立L个分类器,分别对应L个分类标签,进行训练。

标签排序+二分类

使用“成对比较”(pairwise comparison),获得L(L-1)/2个分类器。在训练这些分类器后,利用投票方式得到标签的排序。然后,利用二分类来对标签排序的投票结果进行补充,提高准确性。

随机k标签

从L个标签中,随机选k个标签,重复N次,共获得N个分类器。接着,利用多类分类器(multi-class,不是multi-label)来训练数据,最后进行投票,如果对于某一分类标签的实际获得的投票数占最大可能的投票数的一半以上,那么就说当前的样本属于该分类。通常,k设为3,n设为2L。

预测指标

Hamming Loss:

Hamming Loss是最简单的损失函数,其值是 误分类标签总数/(样本数*标签数),这个值,越小越好

可能这么说不太好理解,下面用Python代码来解释:

# pred为预测标签,y为实际标签 def hamming_loss_class(pred,y): num_class,num_instance = y.shape miss = sum((pred != y)) miss = sum(miss) hamming_loss = miss/(num_class*num_instance) return hamming_loss 

假设,实际标签为:

[1,0,0],[1,0,0],[0,1,1],[0,1,1],[0,1,1]

预测的标签为:

[1,0,0],[1,1,0],[1,1,1],[0,0,1],[0,1,1]

第2、3、4个样本各有一个误分类,那么Hamming Loss的值为3/15=0.2

宏平均(macro-average)与微平均(micro-average)

Hamming Loss虽然简单,但它会有一个严重的问题:例如,一个水果图片数据集要进行预测,其中有990个苹果、5个鸭梨和5个橘子。如果分类器把所有的图片都当做苹果,那么Hamming Loss的值几乎接近0。看起来分类器似乎不错,但其实根本没有任何分类能力。

所以,有人引入了宏平均(macro-average)与微平均(micro-average)

在讨论宏平均与微平均之前,要先了解以下几个概念:

  • precision(准确率,查准率)
  • recall(召回率,查全率)
  • F-Score

多标签分类问题,分类结果通常有4种:

  • 属于该类的样本,被正确分类到该类,记这一类样本数为 TP(True Positive)
  • 不属于该类的样本,却被错误分类到该类,记这一类样本数为 FN(False Negative)
  • 属于该类的样本,却被错误分类到其他类,记这一类样本数为 TN(True Negative)
  • 不属于该类的样本,被正确分类到其他类,记这一类样本数为 FP(False Positive)

                                       机器学习中的多标签分类

recall也就是所有真正属于该类的样本中,被正确预测的个数;

precisionrecall是互补的,如果一个极高,另一个极低,就说明预测是有问题的

机器学习中的多标签分类

  • 宏平均(Macro-average),就是每个分类的F1分数加起来的和
  • 微平均(Micro-average)的计算公式如下:机器学习中的多标签分类

 

微平均就是所有预测正确的样本个数与样本数的和,可

以看出微平均与Hamming Loss的思想是相同的。

与Hamming Loss和微平均比起来,宏平均指数似乎更合理。当然具体要使用什么指标,还是要根据实际数据集的分布决定。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231579.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pytorch实现STN

    Pytorch实现STNfrom__future__importprint_functionimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFimporttorch.optimasoptimimporttorchvisionfromtorchvisionimportdatasets,transformsfromtorch.autogradimportVariableimportmatplotlib…

    2022年10月18日
    3
  • waf(web安全防火墙)主要功能点

    waf(web安全防火墙)主要功能点注入攻击SQL注入防护:阻止恶意SQL代码在网站服务器上执行。命令注入防护:阻止攻击者利用网站漏洞直接执行系统命令。XPATH注入防护:阻止攻击者构造恶意输入数据,形成XML文件实施注入。LDAP注入防护:阻止攻击者将网站输入的参数引入LDAP查询实施注入。SSI注入防护:阻止攻击者将SSI命令在服务端执行,主要发生在.shtml,.shtm,.stm文件。缓冲区溢出防护:阻止请求中填入超过缓冲区容量的数据,防止恶意代码被执行。HPP攻击防护:阻止攻击者利用HPP漏洞来发起注入…

    2022年5月5日
    153
  • Win10安装Ubuntu18.04双系统,图文详解,全网最详细教程

    Win10安装Ubuntu18.04双系统,图文详解,全网最详细教程博主经历过多次双系统的安装与卸载,所以这次安装就记录下全过程,能让后面的同学少走弯路。安装目录一、查看电脑信息1、BIOS模式2、硬盘数二、制作系统盘1、下载镜像源2、制作U盘启动盘三、分配硬盘空间四、安装Ubuntu18.041、进入U盘引导项2、安装设置一、查看电脑信息1、BIOS模式Win+R,输入msinfo32回车,出现系统界面,可查看BIOS模式:本教程只适合BIOS模式为UEFI的电脑,如果BIOS模式为传统的,请查看其他对应教程。2、硬盘数此电脑——>磁盘管理,可以.

    2022年7月24日
    6
  • 从box-sizing:border-box属性入手,来了解盒模型

    从box-sizing:border-box属性入手,来了解盒模型从最开始学习CSS的时候,就了解了盒模型的概念,今天,我们从其中的box-sizing:border-box;的属性入手,来重新认识一下盒模型在实际项目中的运用。背景:先声明一下运用的场景,假如项目布局使用的是自适应的布局方式,div给出的宽度是百分比的形式,即框占窗口宽度的50%,但边界和内边距是用像素来表示的怎么办?为了避免这种问题,可以使用属性box-sizing来调整框…

    2022年4月29日
    48
  • React项目的国际化

     最近做的react项目需要支持国际化,网上查了一下,发现一款很好的插件“react-intl-universal”,由阿里巴巴团队开发,这款插件是原先的国际化插件“react-intl”的升级版,“react-intl”因为一些“致命”缺陷现已被其取代,npm官网有罗列原因,有兴趣的可以去了解一下。下面具体介绍一下这款插件的使用方法。1.安装npminstallreact-i…

    2022年4月12日
    43
  • python怎么调用api接口_偶尔的注解

    python怎么调用api接口_偶尔的注解swagger3的使用Swagger2(基于openApi3)已经在17年停止维护了,取而代之的是sagger3(基于openApi3),而国内几乎没有sagger3使用的文档,百度搜出来的都是swagger2的使用,这篇文章将介绍如何在java中使用openApi3(swagger3)。相关介绍OpenAPIOpenApi是业界真正的api文档标准,其是由Swagg…

    2025年7月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号