数据集:不平衡的数据集

假设有一个数据集包含一个值为正例负例的分类标签。在均衡的数据集中,正例负例标签的数量大致相同。不过,如果一个标签比另一个标签更常见,则数据集不平衡。不平衡数据集中的主要标签称为多数类;不太常见的标签称为少数类

下表提供了不同程度的失衡的普遍接受名称和范围:

属于少数类的数据所占的百分比 不平衡程度
20-40% 的数据集 温和
1-20% 的数据集 一般
不到数据集的 1% 极端

例如,假设有一个病毒检测数据集,其中少数类占数据集的 0.5%,多数类占 99.5%。由于大多数受试者不会感染病毒,因此医学领域中经常会出现此类极不平衡的数据集。

图 5. 包含两个条形的条形图。一个条形显示约 200 个负类别;另一个条形显示 1 个正类别。
图 5. 数据集极不平衡。

 

不平衡的数据集有时不包含足够的少数类示例,无法正确训练模型。也就是说,正例标签太少,模型几乎完全根据负例标签进行训练,无法充分学习正例标签。例如,如果批处理大小为 50,则许多批处理都不会包含正例标签。

通常,尤其是对于轻度不平衡和部分中度不平衡的数据集,不平衡并不是问题。因此,您应先尝试使用原始数据集进行训练。如果模型运行良好,则表示您已完成。如果没有,至少次优模型可以为未来的实验提供良好的基准。之后,您可以尝试使用以下方法来解决由不平衡的数据集造成的问题。

下采样和上调权重

处理不平衡数据集的一种方法是对多数类进行抽样并增加权重。以下是这两个新术语的定义:

  • 降采样(在此上下文中)是指使用占比异常低的多数类样本子集进行训练。
  • 加权是指向降采样的类别添加一个示例权重,该权重等于降采样所依据的因子。

第 1 步:对多数类进行下采样。考虑图 5 中显示的病毒数据集,其正例标签与负例标签的比例为 1 比 200。按 10 的比例进行下采样后,正例与负例的比例会改善为 1 比 20(5%)。虽然生成的训练集仍然略不平衡,但正例与负例的比率远远优于原始的极不平衡比率 (0.5%)。

图 6. 包含两个条形的条形图。一个条形显示 20 个负类别;另一个条形显示 1 个正类别。
图 6. 下采样。

 

第 2 步:提高降采样类的权重:向降采样类添加示例权重。按 10 的系数进行下采样后,示例权重应为 10。(是的,这可能看起来违反直觉,但我们稍后会解释原因。)

图 7. 下采样和上调权重的两步示意图。
            第 1 步:降采样会从多数类别中提取随机示例。第 2 步:上调权重会为经过下采样的示例增加权重。
图 7. 权重上调。

 

术语权重并不指模型参数(例如 w1 或 w2)。这里的权重是指示例权重,它会在训练期间提高单个示例的重要性。示例权重为 10 表示模型会将该示例视为权重为 1 的示例的 10 倍重要(在计算损失时)。

权重应等于您用于降采样的因子:

\[\text{ \{example weight\} = \{original example weight\} × \{downsampling factor\} }\]

在下采样后添加示例权重可能看起来很奇怪。毕竟,您正尝试让模型在少数类别上取得改进,那么为什么要对多数类别进行加权?事实上,增加多数类的权重往往会降低预测偏差。也就是说,在下采样后上调权重往往会缩小模型预测结果的平均值与数据集标签的平均值之间的差异。

重新平衡比率

您应按比例缩减和增加多少数据,才能使数据集重新平衡? 为了确定答案,您应对重新平衡比率进行实验,就像对其他超参数进行实验一样。不过,最终的答案取决于以下因素:

  • 批次大小
  • 不平衡比率
  • 训练集中的示例数

理想情况下,每个批次应包含多个少数类示例。如果批处理不包含足够的少数类,则训练效果会非常差。批处理大小应是失衡比率的数倍。例如,如果不平衡比率为 100:1,则批量大小应至少为 500。

练习:检查您的理解情况

请考虑以下情况:

  • 训练集包含略多于 10 亿个示例。
  • 批处理大小为 128。
  • 不平衡比率为 100:1,因此训练集的划分如下:
    • 约 10 亿个多数类示例。
    • 约 1,000 万个少数类别示例。
以下哪些陈述是正确的?
将批处理大小增加到 1,024 会改进生成的模型。
如果批处理大小为 1,024,则每个批处理平均包含约 10 个少数类示例,这应该有助于训练效果更出色的模型。
将批量大小保持为 128,但将下采样率(和上采样率)降低到 20:1,可以改进生成的模型。
得益于下采样,每个包含 128 个样本的批次平均包含约 21 个少数类示例,这应该足以训练出实用的模型。请注意,下采样会将训练集中的示例数量从略高于 10 亿减少到约 6,000 万。
当前的超参数没问题。
如果批量大小为 128,则每个批量平均包含约 1 个少数类示例,这可能不足以训练出有用的模型。