多分类问题的基本策略是利用二分类问题解决多分类问题。假设一组数据有N个类别,C1、C2、……、Cn,多分类学习器的基本思路是“拆解法”,即将多分类任务拆解为若干个二分类任务求解。对每个二分类任务进行训练得到若干个分类器;在测试时对这些分类器的预测结果进行集成,获得最终的多分类结果。
经典的拆分策略有三种:一对一(one vs one,OvO)、一对其余(one vs rest,OvR)和多对多(many vs many,MvM)。对于给定的数据集D一共有m个样本,该数据集中所有样本分为N类,其中N>2。
OvO的策略可以总结为如下几步,
(1)将N个类别两两组合,在不重复的情况下,一共产生N(N-1)/2个组合。
(2)每一个组合对应了一个二分类任务,假设其中一个组合为(Ci,Cj),则会针对这两个类别训练得到一个分类器,该分类器把数据集D中的 Ci 类样本作为正例,Cj 类样本作为反例进行训练。得到一个针对 Ci 类和 Cj 类的分类器。
(3)重复步骤2中的操作,最终得到N(N-1)/2个分类器。
(4)将一个测试样本作为输入数据分别传入到步骤3中得到的N(N-1)/2个分类器中。可以得到N(N-1)/2个预测结果 ,把这些结果中预测最多的类别作为最终的分类结果。
OvR的步骤可以总结如下,
(1)将N个类中的一个类作为正例,其余类作为反例。这样可以得到N种不同的组合,每个组合对应了一个二分类问题。
(2)针对上面N种二分类问题进行训练,总共可以得到N个分类器。
(3)使用一个样本点进行测试时,如果N个分类器中只有一个分类器预测该样本为正例,则将该样本归类到该分类器对应的正例类别中;反之,如果出现多个分类器预测该样本为正例的情况,则通常考虑这几个分类器的置信度,选择置信度最高的分类器,将该样本归类到这一分类器对应的正例类别中。
OvR的操作具体如下,同样是使用与1.1中一样的数据集进行演示,
比较OvO策略和OvR策略,
MvM是每次讲若干个类作为正例,若干个类作为反例。因此,OvO和OvR可以视为MvM的特殊情况。值得注意的是,MvM的正反例的选取是有科学依据的,不是随机选取的,最常用的MvM技术是纠错输出码(Error Correcting Output Codes,ECOC)。
对ECOC进行简单介绍,ECOC的工作主要分为两步,
(1)编码:对N个类别进行M次划分,每次划分将一部分类别划分到正类中,一部分类别属于反类,正类和反类形成一个二分类训练集;这样一共产生M个训练集,能够训练出M个分类器。
(2)解码:M个分类器分别对测试样本进行预测,所得结果与测试样本实际类别进行比较,将其中损失最小的分类器的预测结果作为最终的结果,并将该分类器选为最终的分类器。
ECOC一般分为两种,“二元ECOC码” 和 “三元ECOC码”,前者将N个类别分为正类和反类;后者除了将N个类别分为正类和反类外,还可以指定“停用类”。
二元ECOC码的示意图如下,假设使用的数据集D由4类不同的样本组成,分别使用C1~C4进行表示。
上方的4×5的矩形代表的是5个分类器MvM拆分的策略,+1 和 -1 分别表示学习器fi将该类样本作为正例、反例;
假设测试样本点实际属于类别C3,所以当分类器全部正确预测时得到的理想结果应为
(-1,+1,+1,-1,+1)
然而根据上图最终得到的测试示例结果
(-1,-1,+1,-1,+1)
可以看出,分类器f2在预测的时候产生了错误。但是计算每个类别理想结果与当前结果的距离,依旧可以将该样本点分类到C3类别中。所以,可以得到一个重要的结论,ECOC的编码过程对多分类问题的错误有一定的容忍和修正能力。一般来说,ECOC编码越长,纠错能力越强,但是编码过长会使编码的意义。
ECOC的解码过程对应的就是求取距离的过程,解码过程得到的距离最小的编码形式对应着最终的多分类结果。
三元编码的示意图如下,
与二元编码相似,上方的4×7的矩形代表的是7个分类器MvM拆分的策略,“+1”和“-1”分别表示学习器fi将该类样本作为正例、反例;黑色无标号的方块可以视为值为0,表示在该分类器中不使用该类的样本。
三元ECOC编码的计算与二元无差异,需要注意的是三元编码方式求取汉明距离和欧氏距离的方法。汉明距离不考虑值为0的方块;而欧氏距离中是要考虑的。
分类问题一个共同的基本假设是不同类别训练样本数目相同。如果不同类别样本的训练数目稍有差别,通常对训练的影响不大;而如果差别很大,则会对学习过程造成困扰。
类别不平衡是指分类任务中不同类别训练样例数目差别很大的情况。本节笔记假设正例样本少,负例样本多。
对于多分类问题而言,OvR和MvM对每个类进行了相同的处理,其拆解出的二分类任务中类别不平衡的影响相互抵消,因此一般情况下,不需要专门处理。
上面的说明偏理论化,在实际情况下,训练集中不同种类数据的样本分布可能并不能很好的推断出真实几率,所以再缩放的方式是欠妥的。所以现有的技术还是会采取对数据集进行操作的方法,从技术上分类大致可以分成3类,(1)下采样 (2)过采样 (3)直接基于原始数据进行学习
欠采样通过选择性的放弃数目较多的类别中的样本达到样本平衡的目的。欠采样法是不能随机丢弃样本的,因为随机丢弃的过程中可能会丢失一些重要的信息。欠采样法的代表性算法是EasyEnsemble算法,其大致原理是利用集成学习机制,将数量多的类所对应的样本划分为若干个集合提供给不同的学习器使用。从形式上看,这种做法对每个学习器都进行了欠采样,但是从全局角度上而言,并没有丢失任何一个样本。
过采样法的思想是增加数目小的类的样本,但是增加的过程并非简单的对数据样本点进行复制,因为单纯的复制会造成训练严重过拟合。过采样的常用算法是SMOTE算法,引用51CTO学院的图例对该算法进行说明,
(更正上方最后等式是Xk,误录入为Yk。)
该部分挑选了源自西瓜书上的课后讨论题内容,
如果一个多元函数是凸的,那么它的Hessian矩阵是半正定的,
故求取多元函数y的海森矩阵,
对于OvR,MvM来说,由于对每个类进行了相同的处理,其拆解出的二分类任务中类别不平衡的影响会相互抵消,因此通常不需要专门处理。以ECOC编码为例,每个生成的二分类器会将所有样本分成较为均衡的二类,使类别不平衡的影响减小。当然拆解后仍然可能出现明显的类别不平衡现象,比如一个超级大类和一群小类。
ECOC二元码,当码长为2n时,至少可以使2n个类别达到最优间隔,他们的汉明距离为2(n−1)。
类别数为4,因此1V3有四种分法,2V2有六种分法,3V1同样有四种分法。按照书上的话,理论上任意两个类别之间的距离越远,则纠错能力越强。那么可以等同于让各个类别之间的累积距离最大。对于1个2V2分类器,4个类别的海明距离累积为4;对于3V1与1V3分类器,海明距离均为3,因此认为2V2的效果更好。因此我给出的码长为9,类别数为4的最优EOOC二元码由6个2V2分类器和3个3v1或1v3分类器构成。
在每一位编码上出错的概率即指在第i个分类器上的错误率,假设每个分类器选择相同的模型与最优的参数。那么满足概率相当并且独立应该需要每个分类器的正负例比例相当,并且每个分类器划分的正负例在空间中的相对分布情况应当相近。一般情况下一般很难满足这样的条件,肯定会有错误率较高的分类器。错误率较高的分类器数量较少时影响不大,但当高错误率分类器占到多数时,就会使得整体的错误率增高。所以在某些极端情况下,增加码长可能会降低正确率。