2013-02-19 9 views
13

Tôi đã đọc kỹ tài liệu CARET tại: http://caret.r-forge.r-project.org/training.html, họa tiết và mọi thứ khá rõ ràng (ví dụ trên trang web trợ giúp rất nhiều!), Nhưng tôi vẫn còn bối rối về mối quan hệ giữa hai lập luận để trainControl:CARET. Mối quan hệ giữa tách dữ liệu và đào tạoKiểm soát

method 
index 

và hưởng lẫn nhau giữa trainControl và tách dữ liệu chức năng trong dấu nháy (ví dụ createDataPartition, createResample, createFoldscreateMultiFolds)

để khung tốt hơn của tôi câu hỏi, hãy để tôi sử dụng ví dụ sau đây từ các tài liệu:

data(BloodBrain) 
set.seed(1) 
tmp <- createDataPartition(logBBB,p = .8, times = 100) 
trControl = trainControl(method = "LGOCV", index = tmp) 
ctreeFit <- train(bbbDescr, logBBB, "ctree",trControl=trControl) 

Câu hỏi của tôi là:

  1. Nếu tôi sử dụng createDataPartition (mà tôi cho rằng không phân tầng bootstrapping), như trong ví dụ trên, và tôi chuyển kết quả là index đến trainControl tôi có cần sử dụng LGOCV làm phương thức trong cuộc gọi của tôi trainControl không? Nếu tôi sử dụng một số khác (ví dụ: cv) Điều gì sẽ khác biệt? Trong đầu của tôi, khi bạn sửa lỗi index, về cơ bản bạn chọn loại xác thực chéo, vì vậy tôi không chắc chắn vai trò nào method phát nếu bạn sử dụng index.

  2. Sự khác nhau giữa createDataPartitioncreateResample là gì? Có phải là createDataPartition không phân tầng bootstrapping, trong khi createResample thì không?

3) Làm thế nào tôi có thể làm phân tầng k lần (ví dụ: 10 lần) cross validation sử dụng dấu nháy? Sau đây sẽ làm điều đó?

tmp <- createFolds(logBBB, k=10, list=TRUE, times = 100) 
trControl = trainControl(method = "cv", index = tmp) 
ctreeFit <- train(bbbDescr, logBBB, "ctree",trControl=trControl) 

Trả lời

1

Nếu bạn không chắc chắn phương thức vai trò nào sẽ phát nếu bạn sử dụng chỉ mục, tại sao không áp dụng tất cả các phương pháp và so sánh kết quả. Nó là một phương pháp mù của comparaison, nhưng nó có thể cung cấp cho bạn một số trực giác.

methods <- c('boot', 'boot632', 'cv', 
       'repeatedcv', 'LOOCV', 'LGOCV') 

tôi tạo chỉ số của tôi:

n <- 100 
    tmp <- createDataPartition(logBBB,p = .8, times = n) 

tôi áp dụng trainControl cho danh sách các phương pháp, và tôi loại bỏ chỉ số từ kết quả vì nó là chung cho tất cả các phương pháp của tôi.

ll <- lapply(methods,function(x) 
     trControl = trainControl(method = x, index = tmp)) 
ll <- sapply(ll,'[<-','index', NULL) 

Do đó ll của tôi là:

    [,1]  [,2]  [,3]  [,4]   [,5]  [,6]  
method   "boot" "boot632" "cv"  "repeatedcv" "LOOCV" "LGOCV" 
number   25  25  10  10   25  25  
repeats   25  25  1   1   25  25  
verboseIter  FALSE  FALSE  FALSE  FALSE  FALSE  FALSE  
returnData  TRUE  TRUE  TRUE  TRUE   TRUE  TRUE  
returnResamp  "final" "final" "final" "final"  "final" "final" 
savePredictions FALSE  FALSE  FALSE  FALSE  FALSE  FALSE  
p     0.75  0.75  0.75  0.75   0.75  0.75  
classProbs  FALSE  FALSE  FALSE  FALSE  FALSE  FALSE  
summaryFunction ?   ?   ?   ?   ?   ?   
selectionFunction "best" "best" "best" "best"  "best" "best" 
preProcOptions List,3 List,3 List,3 List,3  List,3 List,3 
custom   NULL  NULL  NULL  NULL   NULL  NULL  
timingSamps  0   0   0   0   0   0   
predictionBounds Logical,2 Logical,2 Logical,2 Logical,2 Logical,2 Logical,2 
+0

Thú vị. Cảm ơn! Tôi đang gặp khó khăn khi lập bản đồ câu trả lời cho câu hỏi của tôi. Dựa trên điều này, bạn nghĩ 'chỉ số' đóng vai trò gì ở đây? –

+0

@ user273158 bạn có ý nghĩa gì với vai trò của chỉ mục? chỉ là chỉ bạn tmp vector ... phân vùng của bạn .. – agstudy

+0

Hmm, nhưng làm thế nào một phương pháp như 'boot' (bootstrapping) sử dụng các phân vùng được chỉ định trong' index'? Tôi hiểu bootstrapping như một phương thức cho CV (mẫu có thay thế để đào tạo và đánh giá về những gì còn lại), nhưng không phải cách 'index' được sử dụng trong bootstrapping. –