【问题标题】:using class_weight for imbalancing data-.fit_generator()使用 class_weight 来平衡 data-.fit_generator()
【发布时间】:2021-04-26 07:32:06
【问题描述】:

我有 2 个类别的不平衡数据集。我正在使用categorical_crossentropy。我想知道我的代码。将class_weightcategorical_crossentropy 一起使用是否正确?如果是,class_weight 是仅适用于训练集还是适用于整个数据??

我搜索了很多次,但没有找到任何有用的网站。任何帮助将不胜感激。

我的代码:

model.compile(loss='categorical_crossentropy', optimizer=opt_adam, metrics=['accuracy'])
history=model.fit_generator(generate_arrays_for_training(indexPat, train_data, start=0,end=100)
validation_data=generate_arrays_for_training(indexPat, test_data, start=0,end=100)
steps_per_epoch=int((len(train_data)/2)), 
                                validation_steps=int((len(test_data)/2)),
                                verbose=2,class_weight = {0:1, 1:1.181},
                                epochs=65, max_queue_size=2, shuffle=True)

【问题讨论】:

    标签: python machine-learning keras deep-learning cross-entropy


    【解决方案1】:

    是的,您可以使用具有分类交叉熵的类权重。在计算损失函数时应用权重。错误的分类将根据权重进行处罚。因此,权重既不适用于验证集,也不适用于测试集。这个想法是在训练时模型更加关注一个类并相应地更新权重。

    这就是为什么在测试或验证时,学习的权重会隐含地偏向于类权重。

    您的代码中唯一的问题可能是类权重。权重可能必须加起来为 1,但您应该检查库的详细信息。

    【讨论】:

    • 您的意思是错误的是 1 类的 1.181 吗?不幸的是,我没有找到图书馆详细信息页面。你能把图书馆​​页面发给我吗?我还搜索了关于类权重的参考论文,以在我的文章中引用它。如果你能帮助我,我将不胜感激
    • keras.io/api/models/model_training_apis/#fit-method 这里是 fit 方法的链接。它必须等同于 fit_generator。似乎班级权重加起来不必为1。我不知道一篇论文。我认为使用类权重不一定需要引用。这是一个很常见的东西,一直在使用。
    • 感谢您的帮助,我很感激。好的,如果我有 0 类的 3808 个样本和 1 类的 1291 个样本,我应该在 class_weight 中写什么? ,我觉得应该是class_weight={0:1, 1:1.95},对吗??
    • 你能告诉我你是怎么到达 1.95 的吗?
    • '1.95*1291=2517' 是样本之间的差异,那么在这个权重之后,第 1 类的样本应该是 1291+2517=3808 。对吗??
    【解决方案2】:

    我没有足够的声誉来发表评论,但是由于您要求提供参考论文,因此这里有一篇关于动态调整的类权重和类不平衡的新发表的论文。 https://ieeexplore.ieee.org/document/9324926

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2017-09-13
      • 2021-01-16
      • 2020-10-05
      • 2020-01-05
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多