二分类的Caret二进制分类器与RMSE

3

请问有没有办法让Caret在二分类问题中使用RMSE?

如果你尝试在分类问题中使用metric = "RMSE",你会收到以下错误信息:

Error in train.default(x, y, weights = w, ...) :
    Metric RMSE not applicable for classification models

这是有道理的。但是否有一种方法定义自定义度量标准?例如,如果您的结果为01,则可以将误差定义为outcome - p,其中p是模型预测的概率。
编辑====================

为了更好地理解并且了解使用这个措施的原因,请参考Michael J. Procopio的An Experimental Analysis of Classifier Ensembles for Learning Drifting Concepts Over Time in Autonomous Outdoor Robot Navigation中的2.7.1章节,或者softclassval论文

2个回答

8

Y应该是一个因素。在训练模型之前,请使用as.factor()将其转换为因素。


1
谢谢!这解决了我在y上进行二项式train()时出现的“分类模型不适用于度量RMSE”错误,其中y是一个逻辑(布尔)值。根据您的提示,我使用as.factor()将y从布尔值转换为因子,问题得到解决。说起来真是个神秘的错误信息! - pbnelson
在我的情况下,Y已经是一个因子了,但我仍然遇到了这个错误。因此,这可能解决了特定的用例,但我认为这不是一个普遍可接受的解决方案。 - Kingz

3
我不知道为什么你想这样做,但是你可以创建自己的摘要函数:
library(caret)

set.seed(1)
dat <- twoClassSim(100)

foo <- function(data, lev = NULL, model = NULL) {
  probs <- data[, lev[1]]
  c(rmse = RMSE(pred = probs,
                obs = ifelse(data$obs == lev[1], 1, 0)))
}

ctrl <- trainControl(classProbs = TRUE,
                     summaryFunction = foo)
set.seed(2)
mod <- train(Class ~ ., data = dat,
             method = "lda",
             metric = "rmse",
             minimize = TRUE,
             trControl = ctrl)

马克斯


很抱歉又回复你了。我无法从这些文档中找出如何让caret选择具有最小值的模型。上面的示例选择具有最大RMSE的模型(将“lda”替换为“rf”即可重现)。 - James Owers
1
我的上面的编辑似乎没有被接受。要重现问题,请使用 method = "rf" 运行上面的代码。我提出的修复方法是将 minimize = TRUE 更改为 maximize = FALSE - James Owers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接