多分类学习,考虑N个类别,多分类学习的基本思想就是:
将多分类任务拆为若干个二分类任务求解。
先对问题进行拆分,拆出的每个二分类任务训练一个分类器,在测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果。
最经典的拆分策略有三种:
- 一对一(OVO),对于N分类学习,OVO将这N个类别两两配对,从而产生个二分类任务,在测试阶段,新样本同时提交给所有分类器,于是我们将得到个分类结果,最终结果将由投票产生。
- 一对其余(OVR),每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器,在测试时,如果仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果,若有多个分类器预测为正类,通常考虑各分类器的预测置信度,选择置信度最大的类别标记作为最终分类结果。
- 多对多(MVM),每次将若干类作为正类,将若干类作为反类,OVO和OVR是MVM的特例!正反类不能随便选!一种常用的MVM技术:纠错输出码(ECOC)
比较OVO和OVR:OVO的存储开销和测试时间开销通常比OVR更大。在类别很多时,OVO的训练时间开销比OVR更小(OVO每个分类器仅用两个类的样例,OVR中每次都用全部训练样例)。
ECOC是将编码的思想引入类别拆分,并尽可能在解码过程中具有容错性:
- 编码:对N个类做M次划分,每次划分将一部分类别划分为正类,一部分划分为反类,从而形成一个二分类训练集;这样一共产生M个训练集,训练出M个分类器。
- 解码:M个分类器分别对测试样本进行预测,这M个预测标记组成一个编码,这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。
类别划分通过如上图所示的编码矩阵来指定。C指各个类别,f指各学习器,红圈圈的为对应预测结果。
纠错输出码有容错能力!同时对同等长度的编码,理论上来说,任意两个类别之间的编码距离越远,纠错能力越强。在码长较小时可以根据这个原则计算出理论最优编码。
类别不平衡问题分类任务中不同类别的训练样例数目差别很大的情况。
用线性分类器讨论,对新样本x进行分类时,事实上时在用预测出的值与一个阈值进行比较,y实际上表达了正例的可能性,几率 反映了正例可能性和反例可能性之比,阈值设置为0.5恰表明分类器认为真实正、反例可能性相同,决策规则为:
当训练集正反例数目不同时,令表示正例数目,表示反例数目,观测几率是,由于我们通常假设训练集是真实样本总体的无偏采样,因此观测几率就是真实几率,于是
分类器是基于(1)式进行决策的,使用再缩放对预测值进行调整:
训练集是真实样本总体的无偏采样这个假设其实往往不成立,对类别不平衡问题现有技术有三类做法(假设反例多于正例):
- 欠采样,去除一些反例使得正、反例数目接近,然后再进行学习。不能随机丢弃反例,可能会丢失一些重要信息。EasyEnsemble利用集成学习机制,将反例分为若干个集合供不同学习器学习,这样对每个学习器看都进行了欠采样,但全局未丢失重要信息。
- 过采样,增加一些正例使得正、反例数目接近,然后再进行学习。不能简单地对初始正例样本进行重复采样,会导致严重的过拟合。如SMOTE中通过对训练集里的正例进行插值来产生额外的正例。
- 直接基于原始训练集进行学习,在进行预测时,将再缩放嵌入其决策过程中,称为”阈值移动”。
文章来源: 机器学习线性模型(3)