一对一还是一对一?

One-versus-one or one-versus-all?

我在 R 中使用 CARET 包进行多类分类。我有 3 类 并且我使用 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 那里学到一些东西)!

如果没有具体原因,我不会太在意你的情况(少量 类 + random-forest;使用 SVM 或有很多 类 虽然它会看看用了什么很有趣)

/编辑

well-working 基础分类器 reference 在性能方面没有太大差异 reference

One-vs-All 通常是我尝试过的大多数库中的默认值。

但是在考虑底层分类器和data-sets时有可能trade-off:

我们称类N的号码。你的data-set样本叫做M.

一对一

  • 整体会训练N个分类器data-set
  • 后果:
    • 它正在做 classification-learnings 的 linear-size,它与 类 的数量成比例
      • 这可能是它经常被默认的原因,因为它也是 well-working 100 类 或更多
    • 它在整体上学习 data-set,如果基础分类器 complexity-wise 受 sample-size 限制,这可能是个问题
      • 通俗例子:SVMs are complexity-wise between O(m^2)-O(m^3) in (depending kernel & kernel-cache; ignoring SGD-based方法)
      • SVM 因此很难在巨大的 data-sets 上学习(与下面的 OvO 比较)

一对一

  • 将在部分 data-set
  • 上训练 N over 2 个分类器
  • 后果
    • 它正在做 classification-learning 的 exponential-size(关于 类 的数量),这与 类
    • 的数量相比非常糟糕
    • 如果您的 data-set 是平衡的,它正在处理 M/N*2 个样本(仅使用两个选定对的样本)
      • 如果 classifier-complexity 由 sample-size 主导(如上所述)
      • ,则与 OvA 相比,这会有所帮助

在你的情况下,你有一小部分 类。如果您的图书馆支持这两种方法,我会首先使用 OvO。但正如所解释的那样,这取决于您的分类器和 class-statistics.

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