类别不平衡问题: 指的是在分类任务中不同类别的训练样本数目差异很大的问题。
我们简单举一个例子:如果我们要判断一名大学生究竟是研究生还是本科生,我们已知在大学中本科生的数量会远远高于研究生的数量,我们假设本科生与研究生比例为9:1。此时,我们只需要将所有学生都判断成是本科生,这样我们的模型就有90%的正确率。但是这样的模型是没有意义的,因为它不可以识别研究生。
所以,各种分类学习的方法都有一个基本的假设:不同类别的训练样例数目相当,或者差异不大。
但是,当这一假设不成立的时候,我们的分类学习方法可能不会得到良好的结果。为了解决这一问题,现在大体上有三种方法。不失一般性,我们认为正例的样本数量远高于反例。
方法一:欠采样
欠采样(亦称为下采样)的思想很简单:对训练集中的正例进行欠采样,即去除一些正例,使得正例和反例的数目相当,在进行学习。
欠采样法的优势在于,它缩小了样本数目,时间成本将会缩小;但是,也就是因为其缩小了样本数量,模型的准确率可能得不到保证,并且随机删除样例也会造成信息的丢失。
目前比较好的方法是将欠采样应用到集成学习中,即对正例进行多次欠采样,之后配以反例,从而形成多组正例/反例数据集,供多个学习器使用。这样看来,每个学习器都采用了欠采样,但是在全局看来不会丢失重要信息。
方法二:过采样
过采样(亦称为上采样)的思想也很简单:对训练集中的反例进行过采样,即增加一些反例使得正例和反例的数目相同,之后在进行学习。
过采样的方法增加了数据量,同时也增加了学习的时间成本。需要注意的是:过采样不能简单的从反例中随机抽取样本,因为这样会导致严重的过拟合问题。
目前比较好的解决方法是通过对反例的插值来产生额外的反例,进而将正例和反例的数量调整至大致相当。
方法三:再缩放
我们分类器的工作原理是预测出 值, 表达的是正例的可能性。然后将 与一个阈值进行比较,通常都是与0.5进行比较,若 时判为正例,否则为反例。
上式也可写为:若 ,则预测为正例 …①
表达的是正例可能性和反例可能性的比值,阈值0.5表明分类器认为正例反例可能性相同。
所以,当我们样本集中的正例和反例数量相差较大的时候,令
表示正例数量,令
表示反例数量,此时我们只要将分类器的决策规则稍微修改即可:
但是,我们的分类器是基于①式的形式进行决策的,所以我们对其进行调整:
若
,则预测为正例,其中