任何人都可以告诉我,当数据集不平衡时,在Keras中应用class_weight
的最简单方法是什么?
我的目标中只有两个班级。
谢谢。
class_weight
函数的fit()
参数是将类映射到权重值的字典。
假设您有500个0级样本和1500个1级样本,而不是您在class_weight = {0:3,1:1}中提供的样本。这使得0级成为第1级重量的三倍。
train_generator.classes
为您的加权提供正确的类名。
如果你想以编程方式计算,你可以使用scikit-learn的sklearn.utils.compute_class_weight()。
该函数查看标签的分布并生成权重,以同等地惩罚训练集中的不足或过度表示的类。
另见这个有用的线程:https://github.com/fchollet/keras/issues/1875
这个帖子也可能有所帮助:Is it possible to automatically infer the class_weight from flow_from_directory in Keras?
使用sklearn工具包中的class_weight。
我也使用这种方法来处理不平衡数据
from sklearn.utils import class_weight
class_weight = class_weight.compute_class_weight('balanced'
,np.unique(Y_train)
,Y_train)
然后是model.fit
Classifier.fit(train_X,train_Y,batch_size = 100, epochs = 10
,validation_data= (test_X,test_Y),class_weight = class_weight )
您是否询问在代码中应用正确的权重或如何执行此操作?代码很简单:
class_weights = {}
for i in range(2):
class_weights[i] = your_weight
然后你在class_weight=class_weights
传递参数model.fit
。
正确的加权使用是某种反向频率;你也可以做一些试验和错误。
1-使用标签及其相关权重定义字典
class_weight = {0: 0.1,
1: 1.,
2: 2.}
2-将字典作为参数输入:
model.fit(X_train, Y_train, batch_size = 100, epochs = 10, class_weight=class_weight)