gpt4 book ai didi

machine-learning - 一对一还是一对多?

转载 作者:行者123 更新时间:2023-11-30 09:10:00 24 4
gpt4 key购买 nike

我正在 R 中使用 CARET 包进行多类分类。我有 3 个类(class),我使用 train 方法进行训练。这是它的代码:

trained.model.rf <- train(x = dataset.train[,-c(ncol(dataset.train))], y = dataset.train[,ncol(dataset.train)],method='rf',
trControl=trainControl(method="cv",number=10), allowParallel=TRUE, tuneLength = 6)
model.rf <- trained.model.rf$finalModel
result.rf <- predict(model.rf, dataset.test, type="response")

对于dataset.train,我将三个类放在一起。我如何判断这是一对一还是一对多的方法?

最佳答案

编辑:

读第二遍后,我意识到您可能只是问 Caret 在做什么,而不是您应该选择哪个。遗憾的是我无法回答这个问题,我必须补充一点,Caret 的文档很糟糕(他们可以从 scikit-learn 中学到一些东西)!

如果没有具体原因,我不会太在意你的情况(少量类+随机森林;使用SVM或有很多类,尽管看看使用了什么会很有趣)

/编辑

运行良好的底层分类器在性能方面没有太大差异reference .

一对多通常是我尝试过的大多数库中的默认设置。

但是在考虑底层分类器和数据集时可能需要权衡:

我们将类的数量称为N。您的数据集的样本称为M

一对多

  • 将在整个数据集上训练 N 个分类器
  • 后果:
    • 它正在进行线性大小的分类学习,可以很好地随类别数量扩展
      • 这可能就是它经常被默认的原因,因为它也可以很好地处理 100 个或更多的类
    • 它正在对整个数据集进行学习,如果底层分类器的复杂性受到样本大小的限制,这可能会成为一个问题
      • 流行示例:SVM的复杂度介于 O(m^2)-O(m^3) 之间(取决于内核和内核缓存;忽略基于 SGD 的方法)
      • 因此,SVM 在大型数据集上学习可能会很麻烦(与下面的 OvO 相比)

一对一

  • 将在部分数据集上训练 N over 2 个分类器
  • 后果:
    • 它正在进行指数级的分类学习(就类别数量而言),但随着类别数量的增加,其扩展性非常差
    • 如果您的数据集是平衡的,则它将处理 M/N*2 个样本(仅使用两个选定对的样本)
      • 如果分类器复杂性主要由样本大小决定(如上所述),那么与 OvA 相比,这会有所帮助

就您而言,您有一小部分类(class)。如果您的图书馆支持这两种方法,我会首先使用 OvO。但这正如所解释的那样,取决于您的分类器和类别统计数据。

虽然上面引用的论文说 OvA 不应该比 OvO 差,但我可以想象,如果您的设置不完美(分类器性能不佳,...),后者可以提供更多的安全性。

关于machine-learning - 一对一还是一对多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42056798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com