基于RMSE的插入符号二值分类
有没有一种方法可以让caret将RMSE用于二进制分类问题 如果您试图使用带有分类问题的基于RMSE的插入符号二值分类,r,r-caret,R,R Caret,有没有一种方法可以让caret将RMSE用于二进制分类问题 如果您试图使用带有分类问题的metric=“RMSE”,您将收到以下消息: Error in train.default(x, y, weights = w, ...) : Metric RMSE not applicable for classification models 这是有道理的。但是,有没有一种方法可以定义自定义度量?例如,如果您的结果为0或1,则可以将错误定义为结果-p,其中p是模型预测的概率 编辑======
metric=“RMSE”
,您将收到以下消息:
Error in train.default(x, y, weights = w, ...) :
Metric RMSE not applicable for classification models
这是有道理的。但是,有没有一种方法可以定义自定义度量?例如,如果您的结果为0
或1
,则可以将错误定义为结果-p
,其中p
是模型预测的概率
编辑====================
为了给这一点提供一些背景和使用这一衡量标准背后的一些理由,请参见Michael J.Procopio中的2.7.1,或我不知道您为什么要这样做,但您可以创建自己的摘要函数:
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)
库(插入符号)
种子(1)
datY应该是一个因素。在培训模型之前,请在其上使用as.factor()。很抱歉再次与您讨论此问题。我无法通过如何使插入符号选择具有最小值的模型来计算。上面的示例选择了RMSE最大的模型(将“lda”替换为“rf”进行复制)。我上面的编辑似乎不被接受。要重现问题,请使用method=“rf”
运行上述代码。我建议的解决方案是将minimize=TRUE
更改为maximize=FALSE
。谢谢!这解决了我的“Metric RMSE not Applieve for classification models”(度量RMSE不适用于分类模型)错误,在y上执行二项式训练(),其中y是逻辑(布尔值)。根据您的提示,我使用as.factor()将y从布尔值转换为因子,问题得到了解决。谈论一个神秘的错误消息!在我的例子中,Y已经是一个因子,我仍然得到这个错误。所以这可能解决了一个特定的用例,但我认为这不是一个普遍接受的解决方案。