多分类学习

1.引言

对于神经网络来说,多分类是完全不成问题的。但是对于传统的机器学习方法来说,一些算法可能并不能直接用来进行多分类。比如,基本的逻辑回归只能做二分类。

所以,为了让那些仅可以做二分类的算法解决多分类问题,很多方法都被提出了。

这其中,主要有OvO,OvR,MvM。

2.OvO

也就是一对一。即把N分类问题分解成N(N-1)/2个二分类问题,训练出N(N-1)/2个分类器,使用时,将样本同时提交给所有分类器,然后对这些分类器的分类结果进行投票得出最终的结果。

这种方法很明显太浪费,训练的分类器太多了。训练时,需要先把训练样本归类,当训练分类i和j类的分类器时,就使用对应的两个类别的样本。

3.OvR

也就是一对其余。选择一类作为正类,其余皆为负类。训练N个分类器,使用时,将样本提交给所有的分类器,若结果只有一个为正类,则最终结果即为此类,若有多个分类器的结果是正类,最终结果还需要使用其他方法来确定。

注意:这种方法会造成样本不均衡。即训练一个分类器时,如果使用全部的数据集,很可能正类样本很少,负类样本非常多。此时,分类器著需要把所有样本全部判为负类,就可以得到极高的准确率。看上去效果很好,实际上效果极差。

4.MvM

也就是多对多。这个比之前的两种方法稍微复杂一些。
采用纠错输出编码(Error-Correcting Output Codes, ECOC),这是一种多分类分解框架,一般将多分类问题分解为编码,训练,解码三个阶段。

4.1 编码

对N类样本做M次划分,每次划分将一部分划为正类,另一部分划为负类,从而形成一个二分类训练集。这样一共有M个训练集,可以训练出M个分类器。一般采用的是二元码或三元码的方式编码。
多分类学习
划分也不是随便划分的,而是按照一定的编码格式(比如上图)。那上面的二元ECOC码为例:
样本共有C1,C2,C3,C4四个类别,第一次编码把C2划为正类,其余划为负类,第二次把C1、C3划为正类,其余划为负类。。。按照这样的方法,共划分了5次(按列)。这样编码工作就完成了

4.2 学习

学习也就是训练过程,按照上面的编码划分的数据集,进行训练,比如上面的例子中,需要5个分类器,

4.3 解码

M个分类器分别对测试样本进行预测,预测结果组成一个预测编码,将预测编码与每类的编码进行比较,返回距离最小的类作为最终预测结果。

其中,距离主要有两种:

  • 汉明距离:从二进制来看,就是两个等长的字符串的二进制对应bit不相同的位个数。
  • 欧氏距离:这个就不必说了。

比如:
多分类学习
通过测试样本和类别编码比较,可知测试样本属于C3类。