2015-10-28 157 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

相關問題