什么是MLC?(Multi-label Classification)
MLC 多标签分类。
- 多类分类 & 多标签分类
多标签分类,是一种有别于多类分类的算法,举个例子:
假设有类["酸", "甜", "苦", "辣", "香"],
多类分类就是 "这个水果点酸"(label="酸"),"这个菜看起来很香"(label="香");
多标签分类则是"辣子鸡虽然尝起来很香,就是太辣了"(label=["辣", "香"]),"酸酸乳就是又酸又甜的"(labe=["酸","甜"])。
明显可以发现,多类分类有且只有一个标签,而多标签分类可以有多个标签(且不定)。
- 难点
(1)类标数量不确定,有些样本可能只有一个类标,有些样本的类标可能高达几十甚至上百个。
(2)类标之间相互依赖,例如包含蓝天类标的样本很大概率上包含白云,如何解决类标之间的依赖性问题也是一大难点。
(3)多标签的训练集比较难以获取。
如何解决MLC问题
目前有很多关于多标签的学习算法,依据解决问题的角度,这些算法可以分为两大类:一是基于问题转化的方法,二是基于算法适用的方法。基于问题转化的方法是转化问题数据,使之使用现有算法;基于算法适用的方法是指针对某一特定的算法进行扩展,从而能够处理多标记数据,改进算法,适用数据。
说白了,基于问题转化的方法,就是你把原来的数据换个角度组合一下,变成一个原来解决过的问题。
基于算法适用的方法,就是你把现有的算法进行了改进,使之适合多标签。
- 基于问题转化的方法
(1) 在传统机器学习模型中可以使用分类器链,在这种情况下,第一个分类器只在输入数据上进行训练,然后每个分类器都在输入空间和链上的所有之前的分类器上进行训练。让我们试着通过一个例子来理解这个问题。在下面给出的数据集里,我们将X作为输入空间,而Y作为标签。在分类器链中,这个问题将被转换成4个不同的标签问题,就像下面所示。黄色部分是输入空间,白色部分代表目标变量。
考虑多标签的相关性时候可以将上一个输出的标签当成是下一个标签分类器的输入。
(2)将标签统一来看(Label Powerset)
在这一点上,我们发现x1和x4有相同的标签。同样的,x3和x6有相同的标签。因此,标签powerset将这个问题转换为一个单一的多类问题,如下所示。
因此,标签powerset给训练集中的每一个可能的标签组合提供了一个独特的类。转化为单标签后就可以使用SVM、textCNN、textRNN等分类算法训练模型了。
感觉Label Powerset只适合标签数少的数据,一旦标签数目太多(假设有n个),使用Label Powerset后可能的数据集将分布在[0,2n-1]空间内,数据会很稀疏。
- 基于算法适用的方法
改编算法来直接执行多标签分类,而不是将问题转化为不同的问题子集。
(1)在传统机器学习模型中穿件的多标签分类模型有:kNN多标签版本MLkNN,SVM的多标签版本Rank-SVM等。
(2)在深度学习中常常是修改多分类模型的输出层,使其适用于多标签的分类,Mark J. Berger[4]在输出层对每一个标签的输出值使用sigmod函数进行2分类(标签之间无关联信息);Kurata在研究多标签分类时仍然使用了经典的CNN结构(如图2所示),不过在最后的全连接层的参数系数有些特别,也就是图2.1中Hidden layer到output layer的系数是经过特别设置的。