与成本函数成反比的贡献
处理不平衡数据的另一种方法是加权每个标签对成本函数的贡献,与标签的频率成反比。在您上面的示例中,我计算了以下类的频率:
1: 10
2: 7
3: 20
4: 2
因此,当真实标签为 时,您可以逐个样本将成本乘以 ,对于标签,乘以,用于标签,用于标签。所以你会看到标签的数量是标签的 5 倍,但它们每个对你的整体成本函数的贡献都一样多。换句话说,您可以预期每个标签对您的成本函数的平均影响大致相同。1101
172
1203
124
1
4
15th
在实践中,我会在整个训练集中使用标签的频率,并设置分子,使乘数之和为 1。例如,在上面的示例中,我将使用分数,,,加起来约为 1。你不需要以这种方式扩展,但如果你不这样做,你实际上是在修改你的学习率。1.26101.2671.26201.262
使用这种方法(如重采样)的一个危险是增加了过度拟合稀有标签的机会。如果您使用这种方法,您可能希望以某种方式规范您的模型。
实际上,我相信大多数深度学习库都提供此功能。例如,在python库keras
中,该keras.models.Model.fit()
方法有一个sample_weight
参数:
sample_weight:训练样本的可选 Numpy 权重数组,用于加权损失函数(仅在训练期间)。您可以传递与输入样本长度相同的平面 (1D) Numpy 数组(权重和样本之间的 1:1 映射),或者在时间数据的情况下,您可以传递具有 shape 的 2D 数组 (samples, sequence_length)
,以应用每个样本的每个时间步长都有不同的权重。在这种情况下,您应该确保sample_weight_mode="temporal"
在compile()
.
最后,我会鼓励你确保你有一个你信任的良好性能指标。使用这样的方法可能会导致您的模型比实际期望的更频繁地估计您的稀有标签。正如蒂姆在评论中所说:
如果某事更常见,那么它被更普遍地预测是合理的。