我在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 ,我将三个类放在一起。 我如何判断这是一对一还是一对一的方式?
答案 0 :(得分:1)
修改强>
经过第二次阅读后,我意识到你可能只是在问Caret在做什么,而不是你应该选择哪一个。可悲的是我无法回答这个问题,我必须补充说,Caret的文档非常糟糕(他们可以从scikit-learn中学到一些东西)!
如果没有具体原因,我会在你的情况下不会那么在意(少数类+随机森林;使用SVM或有很多课程虽然看看有什么用途会很有意思)
<强> /修改
使用良好工作的基础分类器reference在性能方面没有太大差异。
One-vs-All通常是我尝试的大多数库中的默认值。
但是在考虑基础分类器和数据集时可能存在权衡:
让我们调用 N 类的数量。您的数据集样本称为 M 。
O(m^2)-O(m^3)
之间是复杂的(取决于内核和内核缓存;忽略基于SGD的方法)N over 2
个分类器M/N*2
个样本(仅使用两个选定对的样本)
在你的情况下,你有一小组课程。如果你的图书馆支持两种方法,我会首先使用OvO。但是,这就像解释一样,取决于你的分类器和类统计。
虽然上面提到的论文说OvA不应该比OvO差,但我可以想象如果你的设置不完美(分类器性能差,......)后者可以提供更多的安全性。