我训练了一个简单的模型:
mySim <- train(Event ~ .,
method = 'rf',
data = train,
tuneGrid = tg)
优化隐藏图层的两个nnet
参数weight_decay
和size
。我是第一个尝试caret
的人,所以我通常会为每个模型构建绘制train error
和cv error
。为此,我需要具有train
和validation
传递的预测值。
这是我第一次使用交叉验证,所以我有点不确定如何在每次tuneGrid
次迭代中从火车和保持集中获取预测。
如果我有一个长度为3的网格搜索(3个模型要建立)和5倍交叉验证,我假设我将有15套火车&amp;每个模型的坚持预测。
我基本上想要建立的情节是:
在我的y轴是性能指标的情况下,为了使用nnet
进行分类,可以说熵丢失,x轴上的size
网格搜索值从0增加到最大值< / p>
有没有一种方法可以在trainControl
交叉验证期间从训练/保持集中提取预测值?
我查看了一些属性train
返回但不确定我是否遗漏了某些内容。
我知道我在这个问题上缺乏代码,但希望我已经解释过了。
更新
我正确地假设在trainControl
中设置以下参数将返回允许我创建此图的预测:
returnResamp
savePredictions
答案 0 :(得分:3)
以下是如何使用 mlr 库执行请求操作的示例:
library(mlr)
library(mlbench) #for the data set
我将使用Sonar数据集:
data(Sonar)
创建任务:
task <- makeClassifTask(data = Sonar, target = "Class")
创建一个学习者:
lrn <- makeLearner("classif.nnet", predict.type = "prob")
获取学习者的所有可调参数:
getParamSet("classif.nnet")
设置您要调整的内容和范围:
ps <- makeParamSet(
makeIntegerParam("size", lower = 3, upper = 5),
makeNumericParam("decay", lower = 0.1, upper = 0.2))
定义重新取样:
cross_val <- makeResampleDesc("RepCV",
reps = 2, folds = 5, stratify = TRUE, predict = "both")
如何执行搜索(在这种情况下为网格):
ctrl <- mlr::makeTuneControlGrid(resolution = 4L)
把所有东西放在一起:
res.mbo <- tuneParams(lrn, task, cross_val, par.set = ps, control = ctrl,
show.info = FALSE, measures = list(auc, setAggregation(auc, test.sd), setAggregation(auc, train.mean), setAggregation(auc, train.sd)))
你可以在一个列表中定义很多度量(第一个用于选择超参数,而其他只用于显示)。
提取结果:
res <- mlr::generateHyperParsEffectData(res.mbo)$data
情节:
library(tidyverse)
res %>%
gather(key, value, c(3,5)) %>%
mutate(key = as.factor(key)) %>%
ggplot()+
geom_point(aes(x = size, y = value, color = key))+
geom_smooth(aes(x = size, y = value, color = key))+
facet_wrap(~decay)
关于geom_smooth的一系列警告,因为每个拟合只有3个点
以及如何在插入符中执行此操作的示例:
library(caret)
创建一个调控器
ctrl <- trainControl(
method = "repeatedcv",
number = 5,
repeats = 2,
classProbs = TRUE,
savePredictions = "all",
returnResamp = "all",
summaryFunction = twoClassSummary
)
创建超级参数网格:
grid <- expand.grid(size = c(4, 5, 6), decay = seq(from = 0.1, to = 0.2, length.out = 4))
调:
fit <- caret::train(Sonar[,1:60], Sonar$Class,
method = 'nnet',
tuneGrid = grid,
metric = 'ROC',
trControl = ctrl)
情节:
fit$results %>%
ggplot()+
geom_point(aes(x = size, y = ROC))+
geom_smooth(aes(x = size, y = ROC))+
facet_wrap(~decay)