多标签分类怎么做?教你4招

news2024/11/27 18:52:05

首先简单介绍下,多标签分类与多分类、多任务学习的关系:

  • 多分类学习(Multi-class):分类器去划分的类别是多个的,但对于每一个样本只能有一个类别,类别间是互斥的。例如:分类器判断这只动物是猫、狗、猪,每个样本只能有一种类别,就是一个三分类任务。常用的做法是OVR、softmax多分类

  • 多标签学习(Multi-label ):对于每一个样本可能有多个类别(标签)的任务,不像多分类任务的类别是互斥。例如判断每一部电影的标签可以是多个的,比如有些电影标签是【科幻、动作】,有些电影是【动作、爱情、谍战】。需要注意的是,每一样本可能是1个类别,也可能是多个。而且,类别间通常是有所联系的,一部电影有科幻元素 同时也大概率有动作篇元素的。

  • 多任务学习(Multi-task):基于共享表示(shared representation),多任务学习是通过合并几个任务中的样例(可以视为对参数施加的软约束)来提高泛化的一种方式。额外的训练样本以同样的方式将模型的参数推向泛化更好的方向,当模型的一部分在任务之间共享时,模型的这一部分更多地被约束为良好的值(假设共享是合理的),往往能更好地泛化。某种角度上,多标签分类可以看作是一种多任务学习的简单形式。

多标签分类实现

实现多标签分类算法有DNN、KNN、ML-DT、Rank-SVM、CML,像决策树DT、最近邻KNN这一类模型,从原理上面天然可调整适应多标签任务的(多标签适应法),如按同一划分/近邻的客群中各标签的占比什么的做下排序就可以做到了多标签分类。这部电影10个近邻里面有5部是动作片,3部是科幻片,可以简单给这部电影至少打个【科幻、动作】。

技术提升

本文由技术群粉丝分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN +研究方向
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

这里着重介绍下,比较通用的多标签实现思路,大致有以下4种:

方法一:多分类思路

简单粗暴,直接把不同标签组合当作一个类别,作为一个多分类任务来学习。如上述 【科幻、动作】、【动作、爱情、谍战】、【科幻、爱情】就可以看作一个三分类任务。这种方法前提是标签组合是比较有限的,不然标签会非常稀疏没啥用。

方法二:OVR二分类思路

也挺简单的。将多标签问题转成多个二分类模型预测的任务。如电影总的子标签有K个,划分出K份数据,分别训练K个二分类模型,【是否科幻类、是否动作类…第K类】,对于每个样本预测K次打出最终的标签组合。

这种方法简单灵活,但是缺点是也很明显,各子标签间的学习都是独立的(可能是否科幻类对判定是否动作类的是有影响),忽略了子标签间的联系,丢失了很多信息。

对应的方法有sklearn的OneVsRestClassifier方法,

from xgboost import XGBClassifier
from sklearn.multiclass import OneVsRestClassifier
import numpy as np

clf_multilabel = OneVsRestClassifier(XGBClassifier())

train_data = np.random.rand(500, 100)  # 500 entities, each contains 100 features
train_label = np.random.randint(2, size=(500,20))  # 20 targets

val_data = np.random.rand(100, 100)

clf_multilabel.fit(train_data,train_label)
val_pred = clf_multilabel.predict(val_data)

方法三:二分类改良

在方法二的基础上进行改良,即考虑标签之间的关系。每一个分类器的预测结果将作为一个数据特征传给下一个分类器,参与进行下一个类别的预测。该方法的缺点是分类器之间的顺序会对模型性能产生巨大影响。

方法四:多个输出的神经网络

这以与多分类方法类似,但不同的是这里神经网络的多个输出,输出层由多个的sigmoid+交叉熵组成,并不是像softmax各输出是互斥的。

如下构建一个输出为3个标签的概率的多标签模型,模型是共用一套神经网络参数,各输出的是独立(bernoulli分布)的3个标签概率

## 多标签 分类
from keras.models import Model
from keras.layers import Input,Dense

inputs = Input(shape=(15,))
hidden = Dense(units=10,activation='relu')(inputs)
output = Dense(units=3,activation='sigmoid')(hidden)
model=Model(inputs=inputs, outputs=output)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

# 训练模型,x特征,y为多个标签
model.fit(x, y.loc[:,['LABEL','LABEL1','LABEL3']], epochs=3)

通过共享的模型参数来完成多标签分类任务,在考虑了标签间的联系的同时,共享网络参数可以起着模型正则化的作用,可能对提高模型的泛化能力有所帮助的(在个人验证中,测试集的auc涨了1%左右)。这一点和多任务学习是比较有联系的,等后面有空再好好研究下多任务。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在vue的v-for中,key为什么不能用index?

写在前面 在前端中,主要涉及的基本上就是 DOM的相关操作 和 JS,我们都知道 DOM 操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的 DOM 操作便成了前端优化的重要内容。 虚拟DOM(virtual DOM) 在 jQuery 时代…

Yolov3目标检测BS交互式框架——火焰识别为例

每个模块都具有可扩展性,可以根据需求自行扩展。本例子仅用火焰识别,可以自行训练新的权重实现检测不同目标。可以进行内网搭建,无需要安装程序 B/S模式 VS B/S模式: /B/SC/S跨平台√(要写多种)维护成本低…

51单片机点亮LED灯

LED 灯 发光二极管(Light Emitting Diode),主要用于照明、广告灯、指引灯、屏幕等场景。 LED 原理图 VCC 表示电源正极,当二极管的正极对应电源的正极,并且二极管的负极对应电源的负极时,二极管就会亮灯。…

反义寡核苷酸/司盘修饰/载米铂与核酸miR-34a/冰片修饰的丹参酮ⅡA阳离子脂质体的合成

小编今天这里分享的内容是反义寡核苷酸/司盘修饰/载米铂与核酸miR-34a/冰片修饰的丹参酮ⅡA阳离子脂质体的合成方法,一起来看! 冰片(BO)修饰的丹参酮ⅡA(TA)阳离子脂质体TA-BCLPs方法: 采用乙醇注入法制备阳离子脂质体,通过正交设计,以粒径,…

SpringSecurity[5]-基于表达式的访问控制/基于注解的访问控制/Remember Me功能实现

上一篇:SpringSecurity[4]-访问控制url匹配/内置访问控制方法介绍/角色权限判断 链接:SpringSecurity[4]-访问控制url匹配/内置访问控制方法介绍/角色权限判断_豆虫儿的博客-CSDN博客 十一、基于表达式的访问控制 1.access()方法使用 之前学习的登录用户权限判断实际上底层…

Spring Security进阶学习

Spring Security整体架构 认证 认证核心组件的大体关系如下: Spring Security 中的认证工作主要由 AuthenticationManager 接口来负责,它处理来自框架其他部分的身份验证请求。其中还涉及到一些关键类,比如:AuthenticationProvi…

同城预约小程序上门服务上门理疗推拿按摩系统养生美容行业程序源码

在这个工作生活压力巨大的社会,大家恨不得一分钟掰成两半过,别提什么休闲娱乐了,能睡个饱觉就已经是奢侈了!工作固然重要,身心的放松也需要重视,好在随着互联网+的发展,越来越多的行…

PMO在企业项目管理中的五个重要作用

PMO项目管理办公室是成功企业的关键管理工具。它对于推动项目的发展至关重要,以下是PMO的五个重要作用: 1、项目管理过程的标准化 PMO的主要目标在于方法、流程和工具的创建和标准化。 PMO 可能创建的模板包括: • 项目建议书模板。这有…

Java Optional 实用判空实用实战,优雅永不过时

平时我们很多实体类里面会嵌套实体类,实体里面还嵌套实体。 那么我们有时为了取出最里面的实体的某个值的时候,我们就不得不一层层剥开这个 让人流泪的洋葱, 一层层判断。 举例(随便举的): 就像这么一个…

关于迭代器遍历及auto关键词

在使用vector容器或者字符串时,很经常会用到一些遍历操作,除了使用下标遍历之外,使用迭代器遍历也是超级方便,但是迭代器也有有一些小坑,一不注意就会编译出错,所以特意总结一下。 迭代器 迭代器很很多接口…

性能测试之nginx监控系统搭建

不同tomcat服务器的负载均衡 在Nginx服务器192.168.43.138上安装Nginx,(安装教程在前几篇文章有详细描述 )实现反向代理tomcat负载均衡 执行一下命令,关闭防火墙 systemctl disable firewalld.service systemctl stop firewall…

[附源码]Node.js计算机毕业设计防疫科普微课堂Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

从外包被裁到拿到阿里Offer,多亏P8架构师的全套面试文档

引言 又是一年跳槽季,在疫情的影响下,今年的金三银四冷清不少。但无论如何,2020年招聘市场已经显示出了一个清晰的趋势,java开发岗面试越来越难,需求越来越少!也更增加了游戏的“难度系数”。 跳槽时时刻刻…

99-数据结构与算法(上篇)

数据结构与算法数据结构和算法,一个非常古老的课题,工作的时候,一般只求程序能跑,并不太关注性能 一般情况下,我们尽量避坑,即避免这样:ArrayList Or LinkedList,哪个简单用哪个 实…

【Kubernetes】一主二从环境搭建,详细的图文描述

kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。 kubernetes的本质是一组服务器集群&#xff0…

使用Java API操作HDFS

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录学习目标(一)了解HDFS Java API1、HDFS常见类与接口2、FileSystem的常用方法(二)编写Java程序访问HDFS1、创建Maven项…

Nacos 配置中心之长轮询--服务端

先回顾一下客户端和服务端交互的过程 服务端 入口 直接看长轮询的接口 ConfigController.listener PostMapping("/listener")Secured(action ActionTypes.READ, parser ConfigResourceParser.class)public void listener(HttpServletRequest request, HttpServ…

抓住三个关键因素,提高你的ASA广告效果!

​ 众所周知,App Store 作为 iOS 端的流量收口,旗下的 ASA 广告更是广告主在 iOS 生态投放广告的唯一渠道,所提供的四大广告位(Today 标签、搜索标签、搜索结果和产品页面)覆盖了用户访问的全路径,为广告主…

12月14日:跟着猫叔写代码api中的增删改查

首先在数据库中建立一个学生成绩信息表 DROP TABLE IF EXISTS bro_ceshiapi; CREATE TABLE bro_ceshiapi (id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT id,name varchar(100) DEFAULT NULL COMMENT 姓名,class varchar(100) DEFAULT NULL COMMENT 班级,score decima…

[附源码]Python计算机毕业设计Django基于vuejs的文创产品销售平台app

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…