ValueError:`class_weight`必须包含数据中的所有类。类{1,2,3}存在于数据中,但不存在于`class_weight`中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ValueError:`class_weight`必须包含数据中的所有类。类{1,2,3}存在于数据中,但不存在于`class_weight`中相关的知识,希望对你有一定的参考价值。

ValueError:class_weight必须包含数据中的所有类。类{1,2,3}存在于数据中但不存在于class_weight

我正在尝试将类权重分配给我的非平衡类但是在model.fit()之后它会生成此错误,尽管我已经看到已经为此问题提供了其他解决方案但仍无法解决它。

test_split=round(n*2/3)
x_train=x[:test_split]
y_train=y[:test_split]
x_test=x[test_split:]
y_test=y[test_split:]

class_weight_list = compute_class_weight('balanced', numpy.unique(y_train), y_train)
class_weight = dict(zip(numpy.unique(y_train), class_weight_list))
x_train=x_train.astype('float64')
x_test=x_test.astype('float64')

x_train/=255
x_test/=255

y_train=keras.utils.to_categorical(y_train, num_classes)
y_test=keras.utils.to_categorical(y_test, num_classes)
hist=model.fit(x_train, y_train, 
               batch_size=batch_size,
               epochs=epochs,
               validation_data=(x_test, y_test),
               callbacks=[checkpoint],
               class_weight=class_weight
               )
答案

首先尝试标签编码

编辑

encoder = LabelEncoder()
encoder.fit(y_train)
y_train= encoder.transform(y_train)
y_test= encoder.transform(y_test)

class_weight_list = compute_class_weight('balanced', numpy.unique(y_train), y_train)
class_weight = dict(zip(numpy.unique(y_train), class_weight_list))

y_train=keras.utils.to_categorical(y_train, num_classes)  

以上是关于ValueError:`class_weight`必须包含数据中的所有类。类{1,2,3}存在于数据中,但不存在于`class_weight`中的主要内容,如果未能解决你的问题,请参考以下文章

在随机森林中传递 Class_weight 参数时出错

如何为Keras计算Pandas DataFrame的类权重?

在 sklearn RandomForestClassifier 中,class_weight=None 是不是等同于 class_weight="balanced_subsample&qu

sklearn 分类的 class_weight 字典格式

class_weights 或加权损失在哪里惩罚网络?

不平衡数据的 class_weight - Keras