多标签分类_分类问题多标签(multilabel)、多类别(multiclass)
大致上,解决multilabel的方法有两种
大致上,解决multilabel的方法有两种
1)转化问题。把问题转化为一个或多个单目标分类问题,或是回归问题。
2)算法适应。修改学习算法使得能直接处理multilabel的数据。
结论是PT3效果很好,PT4较好也应用比较广泛,PT6由于数据不平衡(如果标签密度太小会导致大量的-1)。
另外,以下几个问题是需要关注和进一步研究的
-
Dimensionality Reduction 降维
-
Label Dependence 标注依赖
-
Active learning 主动学习
-
Multi-instance multi-label learning (MIML) 多实例多标签
-
Multi-view learning. 多视角
-
Multi-task learning (MTL) 多任务
-
Hierarchical multi-label classification (HMC) 多层多标签
1、multilabel classification的用途
多标签分类问题很常见, 比如一部电影可以同时被分为动作片和犯罪片, 一则新闻可以同时属于政治和法律,还有生物学中的基因功能预测问题, 场景识别问题,疾病诊断等。
2. 单标签分类
在传统的单标签分类中,训练集中的每一个样本只有一个相关的标签 l ,这个标签来自于一个不重合的标签集合L,|L| > 1.当|L|=2 时,这就是一个二分类问题,或文本和网页数据的过滤(filtering)问题。当|L| > 2 时是多分类问题。
3、多标签分类问题的定义
简单的说就是同一个实例,可以有多个标签, 或者被分为多个类。和多分类的区别是, 多分类中每个实例只有一个标签。下面是几个形式化的定义。
用代表样本空间,
=
为有限标签集合, 我们假设
中的样本实例
和
的一个子集
相关,这个子集称作相关标签集。同时补集
被认为与x不相关。相关标签集L用向量
标识,其中
。用
表示可能的标签集。
一个多标签分类器h是一个映射,对每一个实例
分配一个分配一个标签子集。因此分类器h的输出是一个向量
。
4、与多标签分类相关/相似的问题
一个同属于监督学习并和多标签分类很相关的问题就是排序问题(ranking)。排序任务是对一个标签集排序,使得排在前面的标签与相应实例更相关。
在特定分类问题中,标签属于一个层次结构(hierarchical structure)。当数据集标签属于一个层次结构的时候,我们这个任务为层次分类,如果一个样本与层次结构的多个节点相关, 那么这个任务就被称为层次多标签分类。
多实例学习(multiple-instance learning)是监督学习的一个变种,用的比较少 ,就不说了。
5. 多标签分类的方法
方法基本上分为两种,一种是将问题转化为传统的分类问题,二是调整现有的算法来适应多标签的分类
常用的转化方法有好几种,比如对每个实例确定或随机的分配一个标签,或只保留只有一个标签的训练样本,然后用传统的多分类方法去训练。这种方法会导致训练样本的损失,所以不推荐使用。还可以将训练样本按每个标签构造一个训练集,每个样本属于或不属于这个标签,对每个标签单独训练一个分类器,然后将多个分类器的结果合成。还有将每个多标签单独看做一个新标签,在一个更多的标签集上做多分类。当多标签样本比较少时,这个方法就比较受限。还有对每个有多个标签的样本,复制该样本,每个样本具有不同的标签,加入训练集后使用覆盖(coverage based)分类法。
调整的算法也比较多,比如通过调整boost kNN SVM等实现多分类,这些调整通常也会用到上面的转换。其中调整kNN实现的多标签分类可以加入先验概率,并能对输出标签排序。基于SVM的算法中,有人在训练集中加入了|L|个二分类的训练结果,然后再进行一次分类,这个方法考虑到了不同标签之间的依赖,也是应用栈(Stacking 多个分类器的叠加)的一个特殊情况。还有人利用了相关规则挖掘的方法。
6. 评价标准
令D表示多标签评价数据集,有|D|个多标签样本。令H为一个多标签分类器,令
为有H基于
的预测结果集。
下面是几个评价标准
7、 一点感悟
多标签学习,还有层次结构学习等,多个标签之间一般不是独立(independent)的,所以好的算法要利用标签之间的依赖
算法训练的时候要么降低cost function 要么学习贝叶斯概率,两种方法本质一样,但表现形式不一样
8. 其它
F-measure能比较好的平衡分类器对不同类别实例不同时在不同类上的表现,因此更适合于不平衡的数据。对一个m维二元标签向量 ,对给定的预测
,F-measure定义为:
其中由定义,0/0=1
F-measure对应于精度和召回的调和平均。
scikit-learn介绍
多类分类(Multiclass classification): 表示分类任务中有多个类别, 比如对一堆水果图片分类, 它们可能是橘子、苹果、梨等. 多类分类是假设每个样本都被设置了一个且仅有一个标签: 一个水果可以是苹果或者梨, 但是同时不可能是两者
多标签分类(Multilabel classification): 给每个样本一系列的目标标签. 可以想象成一个数据点的各属性不是相互排斥的(一个水果既是苹果又是梨就是相互排斥的), 比如一个文档相关的话题. 一个文本可能被同时认为是宗教、政治、金融或者教育相关话题.
多输出回归(Multioutput classification): 给每个样本一系列的目标值. 可以被想象成对每个数据点预测多个属性, 比如在某个定位的风向和风速
多输出-多分类分类(Multioutput-multiclass classification) 和 多任务分类(Multi-task classification):意味着一个单一的评估器需要处理多个联合分类任务. 这是多标签分类任务(只考虑二院分类)和多类分类任务的推广, 输出格式是2d阵列.
-
每一个输出变量的标签机可以是不同的. 比如一个样本的第一输出变量可以是有限类别中是
pear
的概率值, 第二个输出变量可能是有限颜色中是blue
或者green
的概率. -
这意味着任意的支持多输出多类或者多任务分类任务的分类器, 均支持作为一种特殊情况的多标签分类任务. 多任务分类与多输出分类任务相似, 但是有不同的模型公式.
维基介绍
在机器学习中, 多标签分类(multi-label classification) 和与其极度相关的多输出分类(multi-output classification)是分类问题的变种, 每个实例可能会设置多个标签
多标签分类(Multi-label classification)
-
概念
多标签分类是多类分类的一般化, 多类分类是将实例精确分类到一个或者多个类别中的单一标签问题, 在多标签问题中, 没有限制说一个实例可以被设置多少个类别.
正规点讲就是, 多标签分类是找到一个模型将输入
映射到二值向量
-
中.可以将多标签问题转化成一系列的二元分类问题, 然后可以使用多个单标签分类器进行处理.
-
多标签分类采用的算法
-
boosting: AdaBoost.MH和AdaBoost.MR是
AdaBoost
的多标签数据扩展版本 -
k近邻:ML-kNN是将
k-NN
分类器扩展到多标签数据 -
决策树
-
向量输出的核方法
-
神经网络:BP-MLL是反向传播算法的多标签学习问题的扩展
多类分类(Multiclass classification)
-
概念
在机器学习中, 多类(multiclass)或者多项式(multinomial)分类是将实例分配给一个而非多于两个类别的种类(将实例分类给两类中的一个称为二元分类binary classification). 很多分类算法自身支持多于两类的使用, 剩下的就是二元分类算法了, 这就可以通过很多策略去转换成多项式分类器.
要将多类分类与多标签分类区分开, 后者是一个类别有多个标签需要被预测 -
多类分类采用的算法
-
神经网络: 多层感知器就是多类问题的扩展,输出N个二值神经元就可以编程多类任务
-
极限学习机(Extreme Learning Machines (ELM))
-
k近邻: 最古老的非参数分类算法
-
朴素贝叶斯
-
决策树
-
支持向量机
-
一对多(one -vs.- rest)
-
一对一(one -vs.- one)
-
-
二元分类问题转化
-
二元问题的扩展
-
层级分类
将多类分类问题的输出空间分割为一个树. 每个父节点被多个子节点分割, 重复这个过程直到每个子节点仅仅代表一类.