多标签分类的算法,通常改变算法或数据,最常用的方法如下:

改造成二分类

比如,y标签一共有L个分类,那么就建立L个分类器,分别对应L个分类标签,进行训练。

标签排序+二分类

使用“成对比较”(pairwise comparison),获得L(L-1)/2个分类器。在训练这些分类器后,利用投票方式得到标签的排序。然后,利用二分类来对标签排序的投票结果进行补充,提高准确性。

随机k标签

从L个标签中,随机选k个标签,重复N次,共获得N个分类器。接着,利用多类分类器(multi-class,不是multi-label)来训练数据,最后进行投票,如果对于某一分类标签的实际获得的投票数占最大可能的投票数的一半以上,那么就说当前的样本属于该分类。通常,k设为3,n设为2L。

预测指标

Hamming Loss:

Hamming Loss是最简单的损失函数,其值是 误分类标签总数/(样本数*标签数),这个值,越小越好

可能这么说不太好理解,下面用Python代码来解释:

# pred为预测标签,y为实际标签
def hamming_loss_class(pred,y):
    num_class,num_instance = y.shape
    miss = sum((pred != y))
    miss = sum(miss)
    hamming_loss = miss/(num_class*num_instance)
    return hamming_loss

假设,实际标签为:

[1,0,0],[1,0,0],[0,1,1],[0,1,1],[0,1,1]

预测的标签为:

[1,0,0],[1,1,0],[1,1,1],[0,0,1],[0,1,1]

第2、3、4个样本各有一个误分类,那么Hamming Loss的值为3/15=0.2

宏平均(macro-average)与微平均(micro-average)

Hamming Loss虽然简单,但它会有一个严重的问题:例如,一个水果图片数据集要进行预测,其中有990个苹果、5个鸭梨和5个橘子。如果分类器把所有的图片都当做苹果,那么Hamming Loss的值几乎接近0。看起来分类器似乎不错,但其实根本没有任何分类能力。

所以,有人引入了宏平均(macro-average)与微平均(micro-average)

在讨论宏平均与微平均之前,要先了解以下几个概念:

  • precision(准确率,查准率)
  • recall(召回率,查全率)
  • F-Score

多标签分类问题,分类结果通常有4种:

  • 属于该类的样本,被正确分类到该类,记这一类样本数为 TP(True Positive)
  • 不属于该类的样本,却被错误分类到该类,记这一类样本数为 FN(False Negative)
  • 属于该类的样本,却被错误分类到其他类,记这一类样本数为 TN(True Negative)
  • 不属于该类的样本,被正确分类到其他类,记这一类样本数为 FP(False Positive)

那么,这几个指标的计算公式如下:
                                   
precision也就是所有被预测为该类的样本中,真正属于该类的个数;

                                       

recall也就是所有真正属于该类的样本中,被正确预测的个数;

precisionrecall是互补的,如果一个极高,另一个极低,就说明预测是有问题的

为了综合考虑这两个指标,引入了F-Score:
                                  
其中,A是人为设定的,如果F-Score公式中的A=1,那么就称之为F1分数,就是precision与recall的调和平均值:

  • 宏平均(Macro-average),就是每个分类的F1分数加起来的和
  • 微平均(Micro-average)的计算公式如下:

 

微平均就是所有预测正确的样本个数与样本数的和,可

以看出微平均与Hamming Loss的思想是相同的。

与Hamming Loss和微平均比起来,宏平均指数似乎更合理。当然具体要使用什么指标,还是要根据实际数据集的分布决定。

更多推荐