我在理解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)
答案 0 :(得分:0)
random.forest.orig$bestTune
中指定的指标不是损失函数,而是选择最优模型的指标(在大多数情况下是超参数的最佳组合)。因此,通过指定BS功能,您只需选择最大化“失败”预测的mtry。
来自功能帮助:
度量
一个字符串,指定将使用哪个摘要度量标准来选择最佳模型。默认情况下,对于回归,可能的值为“RMSE”和“Rsquared”,对于分类,可能的值为“Accuracy”和“Kappa”。如果使用自定义性能指标(通过trainControl中的summaryFunction参数,则度量值应与其中一个参数匹配。如果不匹配,则发出警告并使用summaryFunction给出的第一个指标。(注意:如果给定) ,这个论点必须命名。)
如果你检查
sys.path
你会看到最好的曲调是最大化BS功能的曲调。但是,这并不会改变原生模型的损失函数。