我的标签是长度为 5 的二进制向量,例如[0, 0, 1, 1, 1]
.
我的标签集非常有偏差,从 1 到 50,其中 [0, 0, 0, 0, 0] 的情况很常见,而所有其他组合则不然。我想使用 Keras 函数中的class_weight
参数来衡量不常见的版本model.fit()
。我收到一条错误消息,上面写着class_weight
必须包含数据中的所有类。
The classes {0, 1, 2, 3, 4} exist in the data but not in class_weight.
基于此,我怀疑 Keras 期望我只有 、 、 等形式的类[1, 0, 0, 0, 0]
,[0, 1, 0, 0, 0]
即[0, 0, 1, 0, 0]
向量中的每个条目中只有 1 个。我应该按如下方式提供权重:
weight_classes = {
0: 50.0, # for [1, 0, 0, 0, 0]
1: 1.0, # for [0, 1, 0, 0, 0]
# etc.
}
有没有办法告诉 Keras 以这种方式赋予权重:
weight_classes = {
(0, 0, 0, 0, 0): 1.0,
(0, 0, 1, 1, 1): 50.0,
(0, 0, 0, 0, 1): 50.0,
# etc.
}
还是有其他方法可以说全零情况不那么重要?
我考虑只是转换标签集以符合单热编码类型的表示。但我宁愿不这样做,因为标签会变得非常大,并且标签之间存在相互依赖关系,我认为通过像我所做的那样对它们进行编码可能会更好地表示它们。它们是相互依赖的,类似于句子中的单词是相互依赖的,但其中个别预测是独立有价值的。
我还考虑只使用子/超级采样,并跳过整个班级的加权。