【发布时间】:2020-07-26 08:50:04
【问题描述】:
我正在使用插入符号中的自定义 summaryFunction 调整参数。
我原本以为如果我设置K折交叉验证,输入数据有N个点,性能会用N/K个数据点来衡量。
但是,显然这似乎不正确,因为当我使用 browser() 提取 data$pred 时,它是传递给汇总函数的数据,它只有 10 个数据。
由于输入(df)有超过 500 个数据点,这个数字比我预期的要小。
为什么它只有 10 个数据?有什么办法可以增加这个吗?(=使用更多大数据点进行性能测试)
需要任何帮助。谢谢。
sigma.list <- seq(1, 5, 1)
c.list <- seq(1, 10, 1)
met <- "FValue"
#define evaluation function
eval <- function(data, lev = NULL, model = NULL){
mat <- table(data$pred, data$obs)
pre <- mat[1,1]/sum(mat[1,]) #precision
rec <- mat[1,1]/sum(mat[,1]) #recall
res <- c("Precision"=pre, "Recall"=rec, "FValue"=2*pre*rec/(pre+rec))
browser()
res
}
#define train control
tc <- trainControl(method = "cv",
number = 5,
summaryFunction = eval,
classProbs = TRUE,
)
#tune with caret
svm.tune <- train(Flag~.,
data = df,
method = "svmRadial",
tuneGrid = expand.grid(C=c.list, sigma=sigma.list),
trControl = tc,
metric = met
)
【问题讨论】:
-
我只是观察到了同样的情况。看来
caret对summaryFunction的第一次调用(你称它为eval)通过了data.frame,第一次只有十个样本。如果您继续调试,您将看到下一个调用具有正确数量的样本。我不确定为什么会发生这种情况,不幸的是必须查看caret源代码。如果我弄明白了会更新你。
标签: r performance-testing cross-validation r-caret