【问题标题】:Dealing with class imbalance with mlr3用 mlr3 处理类不平衡
【发布时间】:2021-02-16 16:12:09
【问题描述】:

最近有人建议我将机器学习框架更改为 mlr3。但我发现过渡比我一开始想的要困难一些。在我目前的项目中,我正在处理高度不平衡的数据,我想在训练我的模型之前对其进行平衡。我发现本教程解释了如何通过管道和图形学习器处理不平衡:

https://mlr3gallery.mlr-org.com/posts/2020-03-30-imbalanced-data/

恐怕这种方法还会通过新数据预测执行类平衡。我为什么要这样做并减少我的测试样本?

所以出现了两个问题:

  1. 不平衡测试数据中的类别是否正确?
  2. 如果是这样,有没有办法在 mlr3 中做到这一点?

当然,我可以手动对训练数据进行子集化并自己处理不平衡,但这不再有趣了! :)

无论如何,感谢您的任何回答,
干杯!

【问题讨论】:

    标签: r pipeline imbalanced-data mlr3


    【解决方案1】:

    回答您的问题:

    恐怕这种方法也会通过新数据预测来实现类平衡。

    这不正确,你从哪里得到的?

    在测试数据中不平衡类别是否正确?

    类平衡通常通过添加或删除行(或调整权重)来实现。在预测步骤期间不应应用所有这些步骤,因为我们希望数据中的每一行都有一个预测值。另一方面,权重通常在预测阶段没有影响。 你的假设是正确的。

    如果是这样,在 mlr3 中有没有办法做到这一点?

    只需按照博文中的说明使用PipeOp。 在训练期间,它将执行指定的过采样或欠采样,而在预测期间不执行任何操作。

    干杯,

    【讨论】:

    • 这只是我的假设。如果您查看 mlr3 书 (mlr3book.mlr-org.com/pipe-modeling.html) 中的图表,看起来图学习器的每个部分也在新数据上进行了处理。类平衡是一个例外,还是我理解错误?
    • PipeOps 在traintest 期间使用正确的步骤实现。所以在这种情况下,你的假设是不正确的。
    • 请参阅 here 以获取参考。在predict 期间,PipeOp 只是传递它的输入。
    • 太棒了,感谢您的详细解释!真的很感激。
    猜你喜欢
    • 2018-03-27
    • 2020-06-27
    • 2023-03-17
    • 2017-04-19
    • 2013-12-26
    • 2016-06-19
    • 2021-06-28
    • 2019-12-25
    • 2021-05-29
    相关资源
    最近更新 更多