R 使用插入符号指定交叉验证折叠

R 使用插入符号指定交叉验证折叠,r,neural-network,cross-validation,r-caret,nnet,R,Neural Network,Cross Validation,R Caret,Nnet,您好,提前谢谢。我正在使用caret交叉验证来自nnet包的神经网络。在列车控制功能的方法参数中,我可以指定交叉验证类型,但所有这些都随机选择观察值进行交叉验证。我是否可以使用插入符号通过ID或硬编码参数交叉验证数据中的特定观察结果?例如,以下是我当前的代码: library(nnet) library(caret) library(datasets) data(iris) train.control <- trainControl( method = "repeat

您好,提前谢谢。我正在使用
caret
交叉验证来自
nnet
包的神经网络。在
列车控制
功能的
方法
参数中,我可以指定交叉验证类型,但所有这些都随机选择观察值进行交叉验证。我是否可以使用插入符号通过ID或硬编码参数交叉验证数据中的特定观察结果?例如,以下是我当前的代码:

library(nnet) 
library(caret) 
library(datasets) 

data(iris) 

train.control <- trainControl( 
    method = "repeatedcv" 
    , number = 4 
    , repeats = 10 
    , verboseIter = T 
    , returnData = T 
    , savePredictions = T 
    ) 

tune.grid <- expand.grid( 
    size = c(2,4,6,8)
    ,decay = 2^(-3:1) 
    ) 

nnet.train <- train( 
    x = iris[,1:4] 
    , y = iris[,5] 
    , method = "nnet" 
    , preProcess = c("center","scale")  
    , metric = "Accuracy" 
    , trControl = train.control 
    , tuneGrid = tune.grid 
    ) 
nnet.train 
plot(nnet.train)

使用插入符号可以实现这一点吗?

使用
索引和
索引输出
控制选项。我编写了一种实现方法,让您选择所需的重复次数和折叠次数:

library(nnet)
library(caret)
library(datasets)
library(data.table)
library(e1071)

r <- 2 # number of repeats
k <- 5 # number of folds
data(iris)
iris <- data.table(iris)

# Create folds and repeats here - you could create your own if you want #
set.seed(343)
for (i in 1:r) {
    newcol <- paste('fold.num',i,sep='')
    iris <- iris[,eval(newcol):=sample(1:k, size=dim(iris)[1], replace=TRUE)]
}

folds.list.out <- list()
folds.list <- list()
list.counter <- 1
for (y in 1:r) {
    newcol <- paste('fold.num', y, sep='')
    for (z in 1:k) {
        folds.list.out[[list.counter]] <- which(iris[,newcol,with=FALSE]==z)
        folds.list[[list.counter]] <- which(iris[,newcol,with=FALSE]!=z)
        list.counter <- list.counter + 1
    }
    iris <- iris[,!newcol,with=FALSE]
}

tune.grid <- expand.grid( 
    size = c(2,4,6,8)
    ,decay = 2^(-3:1) 
    ) 

train.control <- trainControl( 
    index=folds.list
    , indexOut=folds.list.out
    , verboseIter = T 
    , returnData = T 
    , savePredictions = T 
    ) 

iris <- data.frame(iris)

nnet.train <- train( 
    x = iris[,1:4] 
    , y = iris[,5] 
    , method = "nnet" 
    , preProcess = c("center","scale")  
    , metric = "Accuracy" 
    , trControl = train.control 
    , tuneGrid = tune.grid 
    ) 

nnet.train
plot(nnet.train)
库(nnet)
图书馆(插入符号)
图书馆(数据集)
库(数据表)
图书馆(e1071)

很抱歉,我花了一段时间来确认我的猜测,但谢谢你!回答得好!
library(nnet)
library(caret)
library(datasets)
library(data.table)
library(e1071)

r <- 2 # number of repeats
k <- 5 # number of folds
data(iris)
iris <- data.table(iris)

# Create folds and repeats here - you could create your own if you want #
set.seed(343)
for (i in 1:r) {
    newcol <- paste('fold.num',i,sep='')
    iris <- iris[,eval(newcol):=sample(1:k, size=dim(iris)[1], replace=TRUE)]
}

folds.list.out <- list()
folds.list <- list()
list.counter <- 1
for (y in 1:r) {
    newcol <- paste('fold.num', y, sep='')
    for (z in 1:k) {
        folds.list.out[[list.counter]] <- which(iris[,newcol,with=FALSE]==z)
        folds.list[[list.counter]] <- which(iris[,newcol,with=FALSE]!=z)
        list.counter <- list.counter + 1
    }
    iris <- iris[,!newcol,with=FALSE]
}

tune.grid <- expand.grid( 
    size = c(2,4,6,8)
    ,decay = 2^(-3:1) 
    ) 

train.control <- trainControl( 
    index=folds.list
    , indexOut=folds.list.out
    , verboseIter = T 
    , returnData = T 
    , savePredictions = T 
    ) 

iris <- data.frame(iris)

nnet.train <- train( 
    x = iris[,1:4] 
    , y = iris[,5] 
    , method = "nnet" 
    , preProcess = c("center","scale")  
    , metric = "Accuracy" 
    , trControl = train.control 
    , tuneGrid = tune.grid 
    ) 

nnet.train
plot(nnet.train)