我在理解Caret中的手动汇总功能如何工作时遇到了一些问题。我创建了一个简单的代码,将所有预测最大化为“失败”。但由于某些原因,它似乎并未预测所有实例都失败(在训练数据集上)。
请参阅下面的代码:
将所有预测最大化为失败函数:
BS <- function (data, lev = NULL, model = NULL) {
negpredictions <- sum(data$pred == "fail")
names(negpredictions) <- c("Min_Precision")
negpredictions
}
培训脚本:
train.control <- trainControl(method = "repeatedcv",
number = 10,
repeats = 3,
classProbs = TRUE,
#sampling = "smote",
summaryFunction = BS,
search = "grid")
tune.grid <- expand.grid(.mtry = seq(from = 1, to = 10, by = 1))
cl <- makeCluster(3, type = "SOCK")
registerDoSNOW(cl)
random.forest.orig <- train(pass ~ manufacturer+meter.type+premise+size+age+avg.winter+totalizer,
data = meter.train,
method = "rf",
tuneGrid = tune.grid,
metric = "Min_Precision",
maximize = TRUE,
trControl = train.control)
stopCluster(cl)
caret
中指定的度量不是损失函数,而是选择最优模型的度量(在大多数情况下是超参数的最佳组合)。因此,通过指定BS功能,您只需选择最大化“失败”预测的mtry。
从功能帮助:
公 一个字符串,指定将使用哪个摘要度量标准来选择最佳模型。默认情况下,对于回归,可能的值为“RMSE”和“Rsquared”,对于分类,可能的值为“Accuracy”和“Kappa”。如果使用自定义性能指标(通过trainControl中的summaryFunction参数,则度量值应与其中一个参数匹配。如果不匹配,则发出警告并使用summaryFunction给出的第一个指标。(注意:如果给定) ,这个论点必须命名。)
如果你检查
random.forest.orig$bestTune
你会看到最好的曲调是最大化BS功能的曲调。但是,这并不会改变原生模型的损失功能。