[机器学习] 逻辑回归2——多分类问题和过拟合问题
多分类学习
现实生活中常遇到很多多分类学习任务,有些二分类学习方法可以直接推广到多分类,但在现实更多情形下,我们是基于一些策略,利用二分类学习器来解决多分类问题。
利用二分类学习器进行的多分类学习可以分为三种策略:
- 一对一 (One vs One)
- 一对其余 (One vs Rest)
- 多对多 (Many vs Many)
一对一 (One vs One)
给定数据集, 。OvO将这N个类两两配对,从而产生N(N-1)/2个二分类任务。于是我们会得到N(N-1)/2个分类结果,最终的结果可通过投票产生:把被预测得最多的类别作为最终分类结果。
一对多 (One vs Rect)
一对多是将一个类的样例作为正例,其它类的样例作为反例来训练N个分类器。在测试时若仅有一个分类器预测为正类,则对应类别标记为最终分类结果。如有多个分类器预测为正例,则以经过逻辑回归的数据作为衡量标准,哪个大选择哪个。
比较 OvO 和 OvR
容易看出,OvR只需训练N个分类器,而OvO则需要训练N(N-1)/2个分类器,因此,OvO的存储开销和测试时间开销通常比OvR更大。但在训练时,OvR的每个分类器均使用全部的训练样例,而OvO的每个分类器仅用到两个类的样例,因此,在类别很多的时候,OvO的训练时间开销通常比OvR更小。至于预测性能,则取决于具体的数据分布,在多数情况下两者差不多。
多对多 (Many vs Many)
多对多是每次将若干类作为正例,若干其他类作为负例。MvM的正反例构造有特殊的设计,不能随意选取。我们这里介绍一种常用的MvM技术:纠错输出码(EOOC)。
- 编码:对N个类做M次划分,每次划分将一部分类别划分为正例,一部分划分为反例,从而形成一个二分类的训练集:这样共有M个训练集,则可训练出M个分类器。
- 解码:M个分类器分别对测试样本进行预测,这些预测样本组成一个编码。将这个编码与每个类各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。
在分类器f2中,将C1和C3类的样例作为正例,C2和C4作为负例。在解码阶段各分类的测试结果联合起来称为测试示例的编码,测试示例是图中最下面一行。该编码与各类所对应的编码进行比较,将距离最小的编码所对应的类别作为预测结果。例如如果基于海明距离,预测结果是C3。
为什么要用纠错输出码呢?因为在测试阶段,ECOC编码对分类器的错误有一定的容忍和修正能力。例如上图中对测试示例正确的预测编码是(-1,1,1,-1,1),但在预测时f2出错从而导致了错误的编码(-1, -1, 1, -1,1)。但是基于这个编码仍然能产生正确的最终分类结果C3。
过拟合问题
解决过拟合问题的方法有二:
- 减少feature的数量,人工定义留多少feature,算法选取这些feature
- 规格化(regularization)
类别不平衡问题
如果我们的训练集有1000条数据,其中正例2,负例998。那么学习方法只需要返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度。但是这样的学习算法没有价值,因为它不能预测出任何正例。
类别不平衡问题是指分类任务中不同类别的训练例数相差很大的情况。在现实生活中,我们经常遇到类别不平衡,例如通过拆分法解决多分类问题时,即原始问题中不同类别的训练样例数目相当,在使用OvR,MvM策略后,二分类任务仍然可能类别不平衡。
处理这个问题通常有3个方法
- 欠采样。直接对训练集里反例(当前假定反例数目远大于正例)删除一部分,直到正例和反例的数目相当。但是这样可能会丢失一些重要信息。欠采样的代表性算法是利用集成学习机制,将反例划分为若干个集合供不同的学习器使用。这样对每个学习器都进行了欠采样,但在全局来看却不会丢掉重要信息。
- 过采样。对训练集里的正例进行过采样。增加一些正例使得正反例数目接近。但是不能直接对正例进行复制。这样容易引起过拟合。一般的采用代表性算法SMOTE算法。它是通过对训练集里的正例进行插值来产生额外的正例。
- 基于原始训练集进行学习。
令y表示正例的可能性,则反映了正例和反例可能性的比值。阈值设为0.5表明分类器认为正例,负例的可能性相同。即分类器规则为
然而,当训练集中正例和负例的数目不同时,令表示正例的数目,表示负例数目,则观察几率是,由于我们通常假设训练集是真实样本总体的无偏差采样,因此观察几率代表了真实几率。于是,只要分类器的预测几率高于观察几率就应判定为正例。即
但是我们的分类器是基于第一个式子进行决策,因此,需对其预测值进行调整,使其执行第一个式子的时候,实际上是在执行第二个式子。那么只需令
这就是类别不平衡的一个基本策略—再缩放。