Sklearn中的二分类模型可以进行多分类的原理

二分类扩展到多分类的方法

从sklearn的源码中可以找到sklearn将二分类模型推广到多分类模型的具体做法:

GBDT二分类建模python 多个二分类模型_分类

即比较常用的:

  • one-vs-rest(一对多)
  • one-vs-one(一对一)
  • error correcting output codes(纠错输出编码,多对多)

其中,Sklearn中默认的方法是one-vs-rest

接下来将逐个介绍这三个方法的原理及优缺点

one-vs-rest

原理

one-vs-rest的原理很好理解,就是对于多类别数据(假设GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_02个类,GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_03),每次将一个类作为正类,其余类作为负类,进行训练,得到一个分类器,这样最后总共能得到GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_02个分类器,在进行预测时:

  • 若只有一个分类器预测为正类,则分类结果即为对应的类别
  • 若出现多个分类器预测为正类,则根据每个分类器的置信度,选择置信度大的类别作为最终预测结果

优缺点

优点
  1. 易于理解,方便实行,速度快
  2. 只需要训练GBDT二分类建模python 多个二分类模型_sklearn_05个分类器
缺点
  1. 在进行预测时,可能会出现没有分类器预测为正类的问题。
  2. 由于每次训练分类器时,数据是一类对多类,正反两类的数据量偏差过大容易导致数据偏斜问题,影响准确率。

one-vs-one

原理

为了避免one-vs-rest的数据倾斜问题,one-vs-one的策略是每个分类器只负责两个类别的分类,比如对于三分类问题(类A、B、C),其分类器的构造如下:

  • 分类器1负责二分类A、B
  • 分类器2负责二分类A、C
  • 分类器3负责二分类B、C

因此,对于GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_02个类别的分类问题,需要训练GBDT二分类建模python 多个二分类模型_数据集_07个分类器,之后,在进行预测时,将预测数据带入每个分类器中,最后通过投票原则,选择预测结果多的类作为最终预测的类别

优缺点

优点
  1. 避免了一对多中的数据倾斜问题
缺点
  1. 需要训练的分类器以二次速度随类别递增,增加了模型的时间复杂度
  2. 预测时会出现多个类别作为正类出现的次数相同的情况

Error correcting output codes(ECOC)

原理

ECOC可以看作是one-vs-one跟one-vs-rest的一般形式,它每次将若干个类作为正类,其余若干个类作为负类,进行训练,因此也叫多对多,为了方便解释,以一个类别数为4的数据集作为例子进行解释:

假设有一个数据集,类别为A、B、C、D,现根据ECOC方法利用二分类模型对其进行分类。

  1. 对数据集进行划分,划分的流程是将一部分类别数据划分为正类,其余划分为负类,如图所示:

划分的个数没有明确的限制,例如上图划分了4个数据集,但尽量要避免第四种划分格式,以免遭成数据偏斜。(个人认为)

  1. 对于每一个划分的数据集,带入分类器进行训练,得到对应于每一个划分数据集的训练器,以上图数据集划分为例,则能得到4个训练器:GBDT二分类建模python 多个二分类模型_机器学习_08,其中GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_09GBDT二分类建模python 多个二分类模型_分类_10.
  2. 对于每一个训练器我们可以得知器对应于A、B、C、D四个类的输出(即+1,-1),因此可以产生一个编码表如下:
  3. 现在可以对数据进行预测,选取一个样本GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_11,依次带入分类器GBDT二分类建模python 多个二分类模型_机器学习_08中,将每个分类器的输出结果组合,则可以得到一个编码列,为GBDT二分类建模python 多个二分类模型_分类_13,而由上图可以看到,类别A对应的编码列为GBDT二分类建模python 多个二分类模型_分类_14,B对应的编码列为GBDT二分类建模python 多个二分类模型_数据集_15,C对应的编码列为GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_16,D对应的编码列为GBDT二分类建模python 多个二分类模型_数据集_17.为了判断样本GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_11更匹配哪个类别,分别计算样本GBDT二分类建模python 多个二分类模型_GBDT二分类建模python_19的编码列到各个类别的编码列的数据欧氏距离,选择距离最短的作为该样本的预测类别。

笔者关于数据集划分个数问题的思考:

从该流程中可以看出,当划分数据集的个数较少时,样本编码到各个类编码的欧氏距离很容易出现相同,导致无法分类,因此,划分的数据集的个数要适量多,由于随着划分数据集的个数变多,最后无法避免划分出正负两类数据量偏差过大的问题,影响预测的准确性,总之,划分数据集的个数不能太少,也不能太多,需要根据实际情况权衡。

优缺点

优点
  1. 纠错能力强,准确率高。
缺点
  1. 时间复杂度高,需要训练大量分类器以达到效果。