不平衡分类的成本敏感学习
不平衡分类的成本敏感学习
大多数机器学习算法都假设模型所犯的所有错误分类错误都是相同的。
对于不平衡分类问题,情况通常并非如此,因为遗漏正类或少数类案例比错误地将示例归类为负类或多数类更糟糕。有许多现实世界的例子,例如检测垃圾邮件、诊断医疗状况或识别欺诈行为。在所有这些情况下,假阴性(遗漏案例)比假阳性更糟糕或成本更高。
成本敏感型学习是机器学习的一个子领域,在训练机器学习模型时会考虑预测误差的成本(以及潜在的其他成本)。该研究领域与不平衡学习领域密切相关,不平衡学习涉及对具有倾斜类别分布的数据集进行分类。因此,许多为成本敏感型学习而开发和使用的概念和技术可以用于解决不平衡分类问题。
在本教程中,您将发现针对不平衡分类的成本敏感学习的简单介绍。
完成本教程后,您将了解:
- 不平衡的分类问题通常对假阳性分类错误的评价与假阴性分类错误的评价不同。
- 成本敏感学习是机器学习的一个子领域,涉及在训练机器学习算法时明确定义和使用成本。
- 成本敏感技术可分为三类,包括数据重采样、算法修改和集成方法。
教程概述
本教程分为四个部分:
- 并非所有分类错误都是相同的
- 成本敏感型学习
- 成本敏感的不平衡分类
- 成本敏感方法
并非所有分类错误都是相同的
分类是一个预测建模问题,涉及预测观察的类别标签。
可能存在许多类别标签,即所谓的多类分类问题,尽管最简单、也许最常见的一类分类问题有两个类,称为二元分类。
大多数为分类而设计的机器学习算法都假设每个观察到的类别都有相同数量的示例。
在实践中情况并非总是如此,具有偏斜类别分布的数据集被称为不平衡分类问题。
在成本敏感型学习中,每个类(或实例)都会被赋予一个误分类成本,而不是每个实例被正确或错误地分类。因此,问题不是试图优化准确率,而是最小化总误分类成本。
— 第 50 页,《不平衡学习:基础、算法和应用》,2013 年。
除了假设类别分布平衡之外,大多数机器学习算法还假设分类器所做的预测错误是相同的,即所谓的错误分类。
对于二元分类问题,尤其是类别分布不平衡的问题,通常情况并非如此。
大多数分类器假设错误分类的成本(假阴性和假阳性成本)是相同的。在大多数实际应用中,这一假设并不正确。
—针对不平衡数据的成本敏感学习方法,2010 年。
对于不平衡分类问题,来自多数类别的示例称为负类,并分配类标签 0。来自少数类别的示例称为正类,并分配类标签 1。
采用这种负面与正面命名约定的原因在于,来自多数类别的示例通常代表正常或无事件的情况,而来自少数类别的示例代表例外或事件的情况。
- 多数类:负面事件或无事件分配类标签 0。
- 少数类:正面或被分配类标签 1 的事件。
现实世界中不平衡的二元分类问题通常对可能出现的每种分类错误都有不同的解释。例如,将负例分类为正例通常比将正例分类为负例要容易得多。
如果我们认为不平衡二元分类问题上的分类器的目标是正确检测正例,而正例代表我们最感兴趣的异常或事件,那么这是有道理的。
我们可以通过一些例子来澄清这一点。
银行贷款问题:考虑这样一个问题:银行想要确定是否向客户提供贷款。拒绝向优质客户提供贷款并不比向可能永远无法偿还贷款的劣质客户提供贷款更糟糕。
癌症诊断问题:考虑这样一个问题:医生想要确定患者是否患有癌症。诊断健康患者患有癌症并进行更多医学检查比让患有癌症的患者出院要好。
…在对某种癌症进行医学诊断时,如果将癌症视为阳性类,将非癌症(健康)视为阴性,那么漏掉一种癌症(患者实际上是阳性但被归类为阴性;因此也称为“假阴性”)比假阳性错误要严重得多(因此代价高昂)。
—成本敏感学习,机器学习百科全书,2010 年。
欺诈检测问题:考虑一家保险公司想要确定索赔是否为欺诈的问题。将合理的索赔识别为欺诈并跟进客户比接受欺诈性保险索赔更好。
通过这些示例,我们可以看出,误分类错误通常都是不可取的,但有一种误分类比另一种更糟糕。具体来说,将正例预测为负例更有害、更昂贵,或者更糟糕,无论我们想以何种方式衡量目标域的背景。
…将实际的正例错误分类为负例的代价往往比将实际的负例错误分类为正例的代价更大。
—成本敏感学习,机器学习百科全书,2010 年。
将每种类型的错误分类错误视为相同类型的机器学习算法无法满足该类型问题的需求。
因此,训练数据中少数群体的代表性不足以及正确识别少数群体样本的重要性日益增加,使得分类不平衡成为应用机器学习中最具挑战性的问题之一。
类别不平衡是机器学习算法面临的挑战之一。
—针对不平衡数据的成本敏感学习方法,2010 年。
成本敏感型学习
机器学习有一个子领域,专注于学习和使用在进行预测等时具有不均匀惩罚或成本的数据模型。
该领域通常被称为成本敏感机器学习,或更简单地称为成本敏感学习。
…机器学习算法需要对它所处理的成本敏感,在更好的情况下,在模型拟合过程中考虑成本。这导致了成本敏感的机器学习,这是机器学习中一个相对较新的研究课题。
— 第 xiii 页,成本敏感型机器学习,2011 年。
传统上,机器学习算法是在数据集上进行训练的,并力求最小化误差。在数据上拟合模型解决了一个优化问题,我们明确地寻求最小化误差。可以使用一系列函数来计算模型在训练数据上的误差,更通用的术语称为损失。我们力求最小化模型在训练数据上的损失,这与谈论误差最小化是一样的。
- 错误最小化:训练机器学习算法时的传统目标是最小化模型在训练数据集上的错误。
在成本敏感学习中,与错误预测相关的惩罚被称为“成本”。 我们也可以将惩罚的倒数称为“收益”,尽管这种表述很少使用。
- 成本:与错误预测相关的惩罚。
成本敏感学习的目标是最小化训练数据集上模型的成本,其中假设不同类型的预测误差具有不同的、已知的相关成本。
- 成本最小化:成本敏感学习的目标是最小化训练数据集上模型的成本。
成本敏感学习是一种将错误分类成本(以及可能的其他类型的成本)考虑在内的学习类型。这种类型的学习的目标是最小化总成本。
—成本敏感学习,机器学习百科全书,2010 年。
不平衡分类和成本敏感学习之间存在紧密联系。具体而言,不平衡学习问题可以通过成本敏感学习来解决。
然而,成本敏感学习是一个独立的研究子领域,成本的定义可能比预测误差或分类误差更广泛。这意味着,尽管成本敏感学习中的一些方法可能有助于解决不平衡分类问题,但并非所有成本敏感学习技术都是不平衡学习技术,相反,并非所有用于解决不平衡学习的方法都适用于成本敏感学习。
为了具体说明这一点,我们可以考虑在数据集上训练模型时可能希望考虑或衡量成本的多种其他方式。例如,Peter Turney在其 2000 年的论文《归纳概念学习中的成本类型》中列出了机器学习中可能考虑的九种成本类型。
概括起来,它们是:
- 错误分类错误(或更普遍的预测错误)的成本。
- 测试或评估的成本。
- 教师或标签的费用。
- 干预或改变观察系统的成本。
- 因干预而产生的不想要的成果或结果的成本。
- 计算成本或计算复杂性。
- 案件或数据收集的成本。
- 人机交互或构建问题以及使用软件来适应和使用模型的成本。
- 不稳定或差异的成本被称为概念漂移。
尽管对许多现实世界的问题来说,成本和成本敏感学习的概念至关重要,但直到最近才被人们广泛忽视。
在概念学习的实际应用中,涉及多种不同类型的成本。大多数机器学习文献都忽略了所有类型的成本……
—归纳概念学习中的成本类型,2000 年。
上面的列表强调了我们所感兴趣的不平衡分类成本只是更广泛的成本敏感学习领域可能考虑的一系列成本中的一种。
在下一节中,我们将仔细研究如何利用错误分类成本敏感学习的思想来帮助解决不平衡分类问题。
成本敏感的不平衡分类
针对不平衡分类的成本敏感学习首先侧重于为可能出现的错误分类错误类型分配不同的成本,然后使用专门的方法将这些成本考虑在内。
使用成本矩阵的概念可以最好地理解不同的错误分类成本。
让我们首先回顾一下混淆矩阵。
混淆矩阵是分类任务中模型所做预测的汇总。它是一个表格,汇总了针对每个类别所做预测的数量,并按每个示例所属的实际类别进行区分。
最好使用具有负类和正类的二元分类问题来理解,通常分别分配 0 和 1 个类标签。表格的列表示示例所属的实际类,行表示预测类(尽管行和列的含义可以且经常互换而不会丢失含义)。表格中的单元格是满足行和列条件的示例数量的计数,每个单元格都有一个特定的通用名称。
下面列出了二元分类任务的混淆矩阵的一个示例,其中显示了表格中四个单元格中每个值的通用名称。
| Actual Negative | Actual Positive
Predicted Negative | True Negative | False Negative
Predicted Positive | False Positive | True Positive
我们可以看到,我们最感兴趣的是错误,即所谓的假阳性和假阴性,而在许多不平衡的分类任务中,我们最感兴趣的可能是假阴性。
现在,我们可以考虑具有相同行和列的同一张表,并为每个单元格分配一个成本。这称为成本矩阵。
- 成本矩阵:为混淆矩阵中每个单元分配成本的矩阵。
下面的示例是一个成本矩阵,其中我们使用符号*C()*来表示成本,第一个值表示预测类,第二个值表示实际类。混淆矩阵中每个单元格的名称也以首字母缩略词的形式列出,例如 False Positive 是 FP。
| Actual Negative | Actual Positive
Predicted Negative | C(0,0), TN | C(0,1), FN
Predicted Positive | C(1,0), FP | C(1,1), TP
我们可以看到,假阳性(False Positive)的成本为 C(1,0),假阴性(False Negative)的成本为 C(0,1)。
成本矩阵的公式和符号源自Charles Elkan于 2001 年发表的具有开创性的论文“成本敏感学习的基础”。
从该矩阵可以直观地看出,错误分类的成本总是高于正确分类,否则,可以通过预测一个类来最小化成本。
从概念上讲,错误标记一个示例的成本应该总是大于正确标记该示例的成本。
— 《成本敏感学习基础》,2001 年。
例如,我们可能为每个类别的正确预测分配零成本,为假阳性分配 5 成本,为假阴性分配 88 成本。
| Actual Negative | Actual Positive
Predicted Negative | 0 | 88
Predicted Positive | 5 | 0
我们可以使用该框架将分类器的总成本定义为假阴性和假阳性的成本加权总和。
- 总成本 = C(0,1) * 假阴性 + C(1,0) * 假阳性
至少从概念上讲,这是我们在成本敏感学习中寻求最小化的价值。
CSL 的目的是建立一个错误分类成本(总成本)最小的模型
—针对不平衡数据的成本敏感学习方法,2010 年。
必须仔细定义成本矩阵的值。与传统机器学习模型的误差函数选择一样,成本或成本函数的选择将决定适合训练数据的模型的质量和效用。
成本敏感学习的有效性在很大程度上取决于所提供的成本矩阵。所提供的参数对于训练和预测步骤都至关重要。
— 第 66 页,从不平衡数据集中学习,2018 年。
在某些问题领域,定义成本矩阵可能很明显。在保险索赔示例中,误报的成本可能是公司跟踪客户的成本,而误报的成本可能是保险索赔的成本。
在其他领域,定义成本矩阵可能具有挑战性。例如,在癌症诊断测试示例中,假阳性的成本可能是进行后续测试的货币成本,而让病人回家后病情加重的等价美元成本是多少?在这种情况下,成本矩阵可能能够由领域专家或经济学家定义,也可能不能。
此外,成本可能是一个复杂的多维函数,包括货币成本、声誉成本等。
不平衡分类任务的一个好起点是根据逆类别分布分配成本。
在许多情况下,我们无法接触到领域专家,并且在分类器训练期间没有关于成本矩阵的先验信息。当我们想要应用成本敏感学习作为解决不平衡问题的方法时,这是一种常见的情况……
— 第 67 页,从不平衡数据集中学习,2018 年。
例如,我们可能有一个数据集,其中少数类的示例与多数类的示例的比例为 1 比 100 (1:100)。此比率可以反转并用作错误分类错误的成本,其中假阴性的成本为 100,假阳性的成本为 1。
| Actual Negative | Actual Positive
Predicted Negative | 0 | 100
Predicted Positive | 1 | 0
这是一种用于设定总体成本的有效启发式方法,尽管它假设在训练数据中观察到的类分布代表了更广泛的问题,并且适合于所选的成本敏感方法。
因此,最好使用此启发式方法作为起点,然后测试一系列类似的相关成本或比率以确认其合理性。
成本敏感方法
成本敏感的机器学习方法是明确使用成本矩阵的方法来学习。
鉴于我们关注的是分类不平衡问题,我们特别感兴趣的是那些专注于以某种方式使用不同的错误分类成本的成本敏感技术。
成本敏感学习方法通过使用描述对任何特定数据示例进行错误分类的成本的不同成本矩阵来解决学习不平衡的问题。
— 第 3-4 页,《不平衡学习:基础、算法和应用》,2013 年。
与不平衡学习最相关的成本敏感方法可能有三类,它们是:
- 成本敏感型重采样
- 成本敏感算法
- 成本敏感集成
让我们逐一进行仔细的了解。
成本敏感型重采样
在不平衡分类中,数据重采样是指转换训练数据集以更好地平衡类别分布的技术。
这可能涉及选择性地从多数类中删除示例,称为欠采样。更常见的是,它指的是在少数类中复制或合成新示例,称为过采样,或欠采样和过采样的组合。
数据重采样是一种可直接用于成本敏感学习的技术。重采样的重点不是平衡倾斜的类别分布,而是改变训练数据集的组成以满足成本矩阵的期望。
这可能涉及直接对数据分布进行重采样或使用一种方法对数据集中的示例进行加权。此类方法可称为训练数据集的成本比例加权或成本比例重采样。
我们提出并评估了一系列基于训练示例成本比例加权的方法 […],可以通过将权重提供给分类算法(通常在增强中完成)或(以黑盒方式)通过仔细的子采样来实现。
—通过成本比例示例加权进行成本敏感学习,2003 年。
对于使用类分布定义成本矩阵的不平衡分类,数据重采样技术没有区别。
成本敏感算法
机器学习算法很少专门为成本敏感的学习而开发。
相反,可以修改大量现有的机器学习算法来利用成本矩阵。
这可能涉及对每个算法进行独特的修改,并且开发和测试可能非常耗时。许多此类针对流行算法的增强已被提出,例如决策树和支持向量机。
在所有分类器中,成本敏感决策树的诱导可以说获得了最多的关注。
— 第 69 页,从不平衡数据集中学习,2018 年。
scikit-learn Python 机器学习库通过以下分类器上的class_weight参数提供了这些成本敏感扩展的示例:
- 安全虚拟控制器
- 决策树分类器
修改现有算法的另一种更通用的方法是,在训练算法时将成本用作错误分类的惩罚。鉴于大多数机器学习算法都是为最小化错误而训练的,因此在训练过程中将错误分类的成本添加到错误中或用于衡量错误。
该方法可用于迭代训练算法,例如逻辑回归和人工神经网络。
scikit-learn 库通过以下分类器上的class_weight参数提供了这些成本敏感扩展的示例:
- 逻辑回归
- 岭分类器
Keras Python 深度学习库还在训练模型时通过fit() 函数上的class_weight参数提供对神经网络这种成本敏感增强的访问。
同样,当使用逆类分布作为成本矩阵时,成本敏感的算法增强与不平衡的分类算法增强之间的界限变得模糊。
在成本敏感的机器学习领域,这些算法带有“成本敏感”前缀,例如成本敏感逻辑回归,而在不平衡学习中,此类算法带有“类加权”前缀,例如类加权逻辑回归或简称为加权逻辑回归。
成本敏感集成
第二组不同的方法是旨在过滤或组合传统机器学习模型的预测以考虑错误分类成本的技术。
这些方法被称为“包装器方法”,因为它们包装了标准的机器学习分类器。它们也被称为“元学习器”或“集成”,因为它们学习如何使用或组合来自其他模型的预测。
成本敏感元学习将现有的成本不敏感分类器转换为成本敏感分类器,而无需对其进行修改。因此,它可以被视为成本不敏感学习算法的预处理训练数据或后处理输出的中间件组件。
—成本敏感学习,机器学习百科全书,2010 年。
也许最简单的方法是使用机器学习模型来预测类别成员的概率,然后使用线搜索对将示例分配给每个明确的类别标签的阈值进行搜索,以最大限度地降低错误分类的成本。
这通常被称为“阈值”或阈值优化,通常用于二元分类任务,尽管可以轻松修改它以最小化成本而不是特定类型的分类错误度量。
MetaCost 是一种数据预处理技术,它重新标记训练数据集中的示例以最小化成本。
…我们提出了一种原则性方法,通过围绕成本最小化程序使任意分类器具有成本敏感性。
— MetaCost:一种使分类器成本敏感的通用方法,1999 年。
在 MetaCost 中,首先在训练数据集上拟合一个分类器袋装集合,以识别需要重新标记的示例,然后创建带有重新标记示例的数据集的转换版本,然后丢弃该集合并使用转换后的数据集来训练分类器模型。
另一个重要领域是对考虑成本矩阵的决策树集成进行修改,例如 bagging 和 boosting 算法,最显著的是 AdaBoost 的成本敏感版本,例如 AdaCost。
AdaCost 是 AdaBoost 的一个变体,是一种对错误分类成本敏感的提升方法。它使用错误分类的成本来更新连续提升轮次的训练分布。
— AdaCost:错误分类成本敏感提升,1999 年。