我正在R中使用CARET包进行多类分类。我有3节课,我使用方法火车进行培训。这是它的代码:
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相比可以提供帮助
在您的情况下,您只有一小类课程。如果您的图书馆同时支持这两种方法,我将首先使用OvO。但这就像解释的那样,取决于您的分类器和类统计信息。
尽管以上引用的论文说OvA不应比OvO差,但我可以想象,如果您的设置不太完善(分类器性能不佳,...),后者可以提供更高的安全性。
关于machine-learning - 是一对一还是全部?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42056798/