多标签分类问题

原理介绍:

https://blog.csdn.net/bemachine/article/details/10471383

多类分类与多标签分类:https://blog.csdn.net/littlely_ll/article/details/81053928

深度学习---多标签分类问题:https://blog.csdn.net/qq_38906523/article/details/80210527

深度学习,opencv3、MXNet等图像处理相关的demo:https://my.oschina.net/wujux

深度学习模型处理多标签(multi_label)分类任务:https://www.jianshu.com/p/76f9e4c0d0a2(好,介绍了整个处理流程)


多标签(multi-label)分类任务 和 多分类(multi-class)任务的区别:

  • 多标签分类任务指的是一条数据可能有一个或者多个标签,举个例子:比如一个病人的体检报告,它可能被标记上,高血压,高血糖等多个标签。
  • 多分类任务指的是一条数据只有一个标签,但是标签有多种类别。机器学习中比较经典的iris鸢尾花数据集就是标准的多分类任务,一条数据喂给模型,模型需判断它是3个类别中的哪一个。

这里笔者强调一下多标签分类任务的两个特点:

  • 类别标的数量是不确定的,有些样本可能只有一个类标,有些样本可能存在多个类别标签。
  • 类别标签之间可能存在相互依赖关系,还是拿我上述的例子来说:如果一个人患有高血压,他有心血管疾病的概率也会变大,所以高血压这个label和心血管疾病的那些labels是存在一些依赖关系的。

多标签分类算法简介

多标签分类算法比较常用的有ML-KNN、ML-DT、Rank-SVM、CML等。我就不多介绍这些基于传统机器学习的方法,感兴趣的同学可以自己去研究。这里主要介绍如何采用深度学习模型做多标签分类任务,首先我们必须明确一下多标签分类模型的输入和输出。

模型输入输出

假设我们有一个体检疾病判断任务:通过一份体检报告判断一个人是否患有以下五种病:有序排列——[高血压,高血糖,肥胖,肺结核,冠心病]
输入:一份体检报告
输出:[1,0,1,0,0 ] ,其中1代表该位置的患病,0代表没患病。所以这个label的含义:患者有高血压和肥胖。

模型架构

接下来如何建立模型呢:
当然你可以对label的每一个维度分别进行建模,训练5个二分类器。
但是这样不仅是的label之间的依赖关系被破坏,而且还耗时耗力。接下来我们还是来看看深度神经网络是如何应用于此问题的。其架构如下:

  • 采用神经网络做特征提取器,这部分不需要多解释,就是一个深度学习网络;
  • 采用sigmoid做输出层的激活函数,若做体检疾病判断任务的话输出层是5个节点对应一个5维向量,这里没有采用softmax,就是希望sigmoid 对每一个节点的值做一次激活,从而输出每个节点分别是 1 概率;
  • 采用binary_crossentropy损失函数函数,这样使得模型在训练过程中不断降低output和label之间的交叉熵。其实就相当于模型使label为1的节点的输出值更靠近1,label为0的节点的输出值更靠近0。

有点类似 Structure Learing ,最终模型的输出就是一个结构序列。

多标签分类采用的算法 
1.boosting: AdaBoost.MH和AdaBoost.MR是AdaBoost的多标签数据扩展版本 
2.k近邻:ML-kNN是将k-NN分类器扩展到多标签数据
3.决策树
4.向量输出的核方法
5.神经网络:BP-MLL是反向传播算法的多标签学习问题的扩展

链接:https://www.jianshu.com/p/76f9e4c0d0a2


具体过程:


一、打标签

1、生成标签:

机器学习之Matlab制作自己的数据集:https://blog.csdn.net/weixin_39437164/article/details/82691696

从指定文件内读图片的lbp特征值并转成libsvm所需数据格式,并写入文件中的代码:https://blog.csdn.net/weixin_33835690/article/details/85846553

LIBSVM数据格式及其使用:https://blog.csdn.net/handsomewangjg/article/details/47423529

制作LibSVM数据格式:https://blog.csdn.net/chenxjhit/article/details/79176829

MATLAB环境使用LIBSVM-数据格式解析(二):https://blog.csdn.net/wokaowokaowokao12345/article/details/87562045(有个判别男女的例子,不知能否用上)

2、转格式:

将.xlsx格式的数据转换为libsvm格式:https://blog.csdn.net/ckzhb/article/details/72123557

把LIBSVM格式的多标签数据制作成mat格式的数据:https://blog.csdn.net/gf18381303772/article/details/84845032


二、后续流程

多标签学习:LIFT: Multi-Label Learning with Label-Specific Features  (学习标签特征)

TensorFlow 之基于Inception V3的多标签分类 retrain:https://blog.csdn.net/u012936765/article/details/76944727


有代码的:

 

1、基于keras的分类衣服及颜色的demo:

  • 原文汉语版:https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/81090757
  • **带代码版https://blog.csdn.net/Synioe/article/details/83903774

2、基于Inception v3进行多标签训练(分类山河湖海的):

原博客(有将target.txt文件中的数字转成对应标签的代码):https://blog.csdn.net/Numeria/article/details/73604339

有转化target.mat的matlab脚本:https://blog.csdn.net/u012936765/article/details/76944727

3、单图片多标签的分类网络搭建与训练(基于VGG16)

有代码介绍:https://my.oschina.net/u/3800567/blog/1788062

4、CNN图片多标签分类(基于TensorFlow实现验证码识别OCR)(不适用)

https://www.jianshu.com/p/596db72a7e00

5、基于sigmoid的文本多标签分类模型代码实现:https://blog.csdn.net/u011734144/article/details/80923119

你可能感兴趣的:(TransorFlow笔记)