我这里有训练集,验证集和测试集。我想知道如何在不同参数(由插入符号上的网格定义)上训练模型,但是在验证集上计算分类指标?
如果我有以下语法......
TARGET <- iris$Species
trainX <- iris[,-5]
ctrl <- trainControl(method = "cv")
svm.tune <- train(x=trainX,
y= TARGET,
method = "svmRadial",
tuneLength = 9,
preProc = c("center","scale"),
metric="ROC",
trControl=ctrl)
svm.tune
是否有直接表单来获取验证集上的指标作为svm.tune
的打印?或者我应该手动使用“预测”每个考虑的适合度?
由于我是插入语法的新手,我知道如何获取交叉验证的指标,但我想将计算重定向到此验证集。我应该使用哪些参数?
编辑:有没有办法使用验证集而不是交叉验证来显示网格的每组参数的分类指标?
答案 0 :(得分:2)
您可以通过指定index
的{{1}}和indexOut
参数来执行此操作。我将使用trainControl
包中diamonds
数据的示例来突出显示。
ggplot2
然后使用library(caret)
data(diamonds, package = "ggplot2")
# create a mock training and validation set
training = diamonds[1:10000,]
validation = diamonds[10001:11000,]
函数为每个模型拟合创建一些交叉验证折叠。默认createFolds
通常会返回保留而不是保留,因此它的规格为TRUE。
returnTrain = FALSE
现在我们将创建一个包含训练集和验证集的数据框,并创建一个与训练折叠数相等长度的保持标记列表。请注意,这些指标仅对应于作为验证集的数据行。
trainIndex = createFolds(training$price, returnTrain = TRUE)
然后在dat = rbind(training,validation)
valIndex = lapply(trainIndex,function(i) 10001:11000)
对象的规范中,我们将这两个标记列表传递给参数trainControl
和index
,这些指标分别适合和测试并训练我们的模型。 (&#34; lm&#34;这里是速度)
indexOut
您可以通过保留所有重新采样信息并通过手动拟合来测试其中一个(您知道用于拟合的指标,因此可以做到这一点)来说服自己确实正在按照您的目标行事。或者也许只是看到如果我们只使用训练数据,我们会得到不同的重采样结果。 (由于折叠最初是固定的,如果没有使用验证集,我们会期望相同,在重新运行trControl = trainControl(method = "cv",
index = trainIndex,
indexOut = valIndex)
train(price~., method = "lm", data = dat, trControl = trControl)
## Linear Regression
##
## 11000 samples
## 9 predictors
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 8999, 8999, 9000, 9000, 8999, 9000, ...
##
## Resampling results
##
## RMSE Rsquared RMSE SD Rsquared SD
## 508.0062 0.9539221 2.54004 0.0002948073
时摆脱随机性
train
希望有所帮助。
修改强>
好的,只是注意到OP询问了分类示例,但答案对两者都适用。