如何处理Keras中的不平衡班级
我正在使用如何处理Keras中的不平衡班级,keras,deep-learning,multilabel-classification,Keras,Deep Learning,Multilabel Classification,我正在使用Keras处理一个multi-label图像分类问题,因此我使用了来自\u dataframe()和fit\u generator()的函数flow\u 我有大约2000个类,你可以猜到它们是高度倾斜/不平衡的。搜索一段时间后,我遇到了参数class\u weight和classes,我决定试一试。我的问题是,我不确定我是否正确使用了它们。以下是一个例子: 假设我已展平所有类引用,以便获得以下(重复)标签列表: 这是计算类和类权重的函数: from collections import
Keras
处理一个multi-label
图像分类问题,因此我使用了来自\u dataframe()和fit\u generator()的函数flow\u
我有大约2000个
类,你可以猜到它们是高度倾斜/不平衡的。搜索一段时间后,我遇到了参数class\u weight
和classes
,我决定试一试。我的问题是,我不确定我是否正确使用了它们。以下是一个例子:
假设我已展平所有类引用,以便获得以下(重复)标签列表:
这是计算类
和类权重
的函数:
from collections import Counter
def get_classes_weights(l, n):
counter = Counter(l).most_common(n)
classes = [cls for cls, ocu in counter]
majority = max([ocu for cls, ocu in counter])
weights = {idx: float(majority/ocu) for idx, (cls, ocu) in enumerate(counter)}
return classes, weights
我们也假设我只考虑Top-2类:
classes, class_weight = get_classes_weights(labels, 2)
这使得:
classes: ['classD', 'classA']
以及:
最后,这是我在函数中使用它们的方式:
generator_train.flow_from_dataframe(
classes=classes,
)
因此,我的问题是:
- 鉴于我正在处理一个
多标签
图像分类问题,上述方法是否是应用权重的正确方法
- 我的验证集是否需要平衡,或者如果它来自与训练集相同的分布(分别为20%和80%随机选择),那么它是否正常
class_weight: {0: 1.0, 1: 1.5}
generator_train.flow_from_dataframe(
classes=classes,
)
model.fit_generator(
class_weight=class_weight
)