数据集:不平衡的数据集

假设某个数据集包含分类标签,该标签的值是 肯定否定。在均衡的数据集中,正数标签大致相等。不过,如果一个标签更常见 与另一个标签相比,则数据集 不平衡。 不平衡数据集中的主要标签称为多数类;不太常见的标签称为少数类

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

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

例如,假设一个病毒检测数据集,其中少数类占数据集的 0.5%,多数类占 99.5%。这种极不均衡的数据集在医学领域很常见, 绝大多数实验对象都不会感染病毒

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

 

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

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

降采样和上调权重

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

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

第 1 步:对多数类进行下采样。假设病毒数据集 图 5 中每 200 个负类别标签对应 1 个正类别标签的比率。 按 10 的比例进行下采样可将正负例比例调整为 1 比 20(5%)。虽然生成的训练集仍然略不平衡,但正例与负例的比率远远优于原始的极不平衡比率 (0.5%)。

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

 

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

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

 

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

weight 应等于您用于降采样的因数:

\[\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 少数类样本,这应该足以进行训练 有用的模型。请注意,降采样可减少 从十亿多一点到 大约 6000 万
当前超参数没有问题。
如果批量大小为 128,则每个批量平均包含约 1 个少数类示例,这可能不足以训练出有用的模型。