2015-10-28 158 views
-1

所以我需要一些我在R中创建的火车和测试集的帮助。代码的目标是将数据集打破一定数量k,折叠次数设置将是i。然后它将返回训练和测试集。我们假设k将是510R训练和测试集

这是我到目前为止。

create_sets<-function(df,k,i) 
{ 

    n<-dim(df)[1] 

    #fold size 
    size<-n/k 

    #beggining of test set 
    test_start<-(size*i)-(size)+1 

    #end of test set 
    test_end<-size*i 


    indices<-df(test_start,test_end) 

    train<-df[indices,] 
    test<-df[-indices,] 

    return (list(train=train,test=test)) 

} 

df只是xy随机数据帧。那就是:

x<-c(1,6,7,4,3,5,7,8,9,8,7,6,5,4,3,4,5,3,2,1) 

y<-c(3,5,6,7,5,4,3,5,7,8,9,0,2,3,4,5,6,7,5,6) 

df<-data.frame(x,y) 

当我跑我返回一个错误DF

错误代码(test_start,test_end):
说法 “DF2” 缺失,没有默认设置

+0

你的代码是打破因为这行'indices <-df(test_start,test_end)'。你希望从那个电话中得到什么? –

+0

@PierreLafortune我已经想出了解决方案,它其实很简单。索引<-c(test_start,test_end) – Thesystem32

+0

仅供参考包'caret'具有许多功能,您可以立即从这些类型的验证任务中取出。 –

回答

0

这是我会怎么处理它:

n <- nrow(df) 
k <- 5 
set.seed(10272015) 
s <- sample(1:k, n, replace=TRUE) 

result <- rep(NA, k) 
for (i in 1:k) { 
    train <- df[s!=i, ] 
    test <- df[s==i,] 

    # fit model 

    # evaluate 

    # result[i] <- evalscore 
} 

mean(result) 
+0

感谢您的帮助,虽然我已经想出了解决方案,而且其实很简单。 indices <-c(test_start,test_end) – Thesystem32

0

我想你只需要一个不同的子集的索引,这样的:

k <- 5 
folds <- sample(rep(1:k,length=nrow(df))) 

然后,你可以得到由K个子集的任何一个(坐1为例):

df[folds==1,] 
+0

感谢您的帮助,尽管我已经想出了解决方案,而且其实很简单。 indices <-c(test_start,test_end) – Thesystem32

相关问题