这几天看了几篇相关的文章, 写篇文章总结一下,就像个小综述一样, 文章会很乱
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对应于精度和召回的调和平均。
对于最大化F-measure的方法,为了简化问题一般都基于一些假设, 有人用两个循环给出了精确解
就说这么多吧,不想写了
http://blog.csdn.net/bemachine/article/details/10471383