sampling - 在 mlr 中将 Multi Class Wrapper 与 Sampling Wrapper 相结合以获得子问题特定的采样
问题描述
我正在使用 mlr 包解决不平衡的多类分类问题:
标签 | 样品 |
---|---|
一个 | 232 |
乙 | 657 |
C | 221 |
D | 154 |
我想使用不同的机器学习算法来解决它,包括一些不支持开箱即用的多类分类的算法。因此,我检查了 mlr 文档,发现MulticlassWrapper
从底层多类问题中创建二进制“一对一”问题。
我希望专门针对每个二进制分类问题执行平衡。因此,我不希望每个问题都使用相同的上采样率或下采样率,而是根据这个二元问题的实际类分布来使用不同的采样率。
我在 mlr 文档中发现用于采样目的的是OversampleWrapper
、UndersampleWrapper
、OverbaggingWrapper
和SMOTEWrapper
. 问题是它们都需要一个应用的采样率并且不执行基于分布的采样。因此,当我使用以下代码片段中所示的其中一个包装器时,所有二进制子问题都以相同的速率进行采样。
learner <- makeLearner("classif.rpart") # just an example
over.lrn = makeOversampleWrapper(learner, osw.rate = 2)
multiclass.over.lrn = makeMulticlassWrapper(over.lrn, mcw.method = "onevsone")
multiclass.over.model <- train(multiclass.over.lrn, task.train)
例如,问题“A”与“B”将被采样到 464 个“A”和 657 个“B”的分布。
我想为“A”和“B”得到 657 个“A”和 657 个“B”。对于“A”与“C”,它将是 232 个“A”和 232 个“B”等等。因此,对于 MulticlassWrapper 创建的所有二进制问题,采样率不应该是固定的,而是动态的,例如,对于过采样少数类被过采样以匹配主要类的样本数量(反之亦然)。
有没有办法用 mlr 包实现这一点?
(如果不是,我会编写自己的采样包装器来实现这一点,尽管它被团队认为已退休,但将其包含在 mlr 包中通常会很有趣吗?抱歉,我没有为开源项目)。
解决方案
推荐阅读
- sql - Postgres 按范围分组
- node.js - 使用 webpack 构建 Express 应用程序时崩溃
- php - 为什么 php yii2 活动记录查询给出重复项?
- javascript - 无法访问解析的 JSON 对象的属性
- javascript - 使用 Javascript 在调整大小时移动 DOM 中的元素
- firebase - 如何处理 Firestore 最大文档大小?
- php - PHP递归未正确更改数组中的值
- r - 如何使用 R 中全局环境中定义的函数访问函数环境中的元素
- php - 输出当前子域对应的数据
- c# - NullReference Exception“对象引用未设置为对象的实例”在 C#