如何用二分类学习器解决多分类问题

使用二分类学习器解决多分类问题的基本思路是“拆解法”,也就是将多分类任务拆分成多个二分类任务求解。这里主要介绍如何对多分类任务进行拆分,以及对拆分的多个分类器进行集成。

主要有三种拆分策略:“一对一”(One vs One,简称OvO)、“一对其余”(One vs Rest,简称OvR)和“多对多”(Many vs Many,简称MvM).

一、“一对一”(OvO)

假设要对N个类别进行分类。OvO将这N个类别两两配对,所以一共产生\frac{N(N-1)}{2}个二分类任务,对应\frac{N(N-1)}{2}个分类器。

  • 训练阶段:按照正常的二分类算法进行训练
  • 测试阶段:新样本同时提交给所有分类器,于是我们得到\frac{N(N-1)}{2}个分类结果,最终的结果可用过投票产生:即把被预测得到最多的类别作为最终分类结果。

例:对四个类别进行分类,A、B、C、D。

训练阶段产生6个分类器:

如何用二分类学习器解决多分类问题_第1张图片

测试阶段,若测试的结果为:

f1(x) = A、f2(x) = C、f3(x) = A、f4(x) = C、f5(x) = D、f6(x) = C

有3个分类器的结果都为C,所以就把C作为最终的结果。可以看出一对一训练的分类器多,所以训练的速度会比较慢。

二、“一对其余”(OvR)

OvR是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器。在测试时:

  • 若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果;
  • 若有多个分类器预测为正类,则通常考虑各个分类器的预测置信度,选择置信度最大的类别标记作为最终结果。

同样还是以上面的问题为例,产生4个分类器:

如何用二分类学习器解决多分类问题_第2张图片

测试阶段:

f1(x) = -1、f2(x) = -1、f3(x) = +1、f4(x) = -1

所以x属于C类。


比较OvR和OvO:

可以发现,OvR训练的是N个分类器,而OvO训练的是\frac{N(N-1)}{2}个分类器。因此OvR的存储开销和测试时间都比OvO小。但是,从训练时每个学习器使用的样本数来看:OvR每个学习器使用了所有的样本,而OvO的每个学习器只用到两个类别的样本。因此在类别很多时,OvO的训练时间往往会比OvR小。

对于预测性能取决于数据的分布,在多数情形下差别不大.

三、“多对多”(MvM)

MvM是每次将若干个类作为正类,若干个其他类作为反类。可以看出MvM是OvR和OvO更一般的形式。

对于MvM正、反类的构造一种常用的技术是“纠错输出码”(Error Correcting Output Codes,简称ECOC).主要分为两步:

  • 编码:对N个类别做M次划分,每次划分将一部分类别划分为正类,一部分类别划分为反类,从而形成一个二分类训练集;这样一共产生M个训练集,可训练出M个分类器。
  • 解码:测试时,M个分类器分别对测试样本x进行预测,这样预测的结果就形成了一个编码。将这个编码与每个类别各自的编码进行比较,找到距离最短的类别作为最终分类的结果。

还是以上面问题为例,假定M=5。训练结果如下:

如何用二分类学习器解决多分类问题_第3张图片

测试阶段:

f1(x) = -1、f2(x) = -1、f3(x) = +1、f4(x) = -1、f5(x) = +1

所以测试样本的编码为(-1,-1,+1,-1,+1),到A、B、C、D对应编码的欧式距离为2\sqrt{3}, 4, 2, 2\sqrt{2}。比较发现距离C类最近,所以预测的结果就是C类。

       之所以称为纠错输出码,是因为在测试阶段,即使某个分类器预测错了,但是距离可能还是最小的。例如上面的测试样本正确的编码为(-1,+1,+1,-1,+1)也就是f2出错,但是还是能产生正确的分类C。

       一般来说,对于同一个学习任务,ECOC编码越长,纠错能力越强。但是,这意味着所需要的分类器就越多,开销就越大;另一方面,对有限类别数,可能的组合数目是有限的,码长超过一定的范围后就失去了意义。


参考资料:周志华老师《机器学习》

你可能感兴趣的:(深度学习入门)