2017-03-21 8 views
0

私はCaret Rパッケージを使用してSVMモデルをトレーニングしています。私のコードは次の通りです:R - Caret RFEがpickSizeBestを使用しているときに "task 1 failed - Stopping"エラーを表示します。

options(show.error.locations = TRUE)  
svmTrain <- function(svmType, subsetSizes, data, seeds, metric){ 
     svmFuncs$summary <- function(...) c(twoClassSummary(...), defaultSummary(...), prSummary(...)) 

    data_x <- data.frame(data[,2:ncol(data)]) 
    data_y <- unlist(data[,1]) 

    FSctrl <- rfeControl(method = "cv", 
        number = 10, 
        rerank = TRUE, 
        verbose = TRUE, 
        functions = svmFuncs, 
        saveDetails = TRUE, 
        seeds = seeds 
    ) 

    TRctrl <- trainControl(method = "cv", 
         savePredictions = TRUE, 
         classProbs = TRUE, 
         verboseIter = TRUE, 
         sampling = "down", 
         number = 10, 
         search = "random", 
         repeats = 3, 
         returnResamp = "all", 
         allowParallel = TRUE 
    ) 
    svmProf <- rfe(x = data_x, 
       y = data_y, 
       sizes = subsetSizes, 
       metric = metric, 
       rfeControl = FSctrl, 
       method = svmType, 
       preProc = c("center", "scale"), 
       trControl = TRctrl, 
       selectSize = pickSizeBest(data, metric = "AUC", maximize = TRUE), 
       tuneLength = 5 
    ) 
} 

data1a = openTable(3, 'a') 
data1b = openTable(3, 'b') 
data = rbind(data1a, data1b) 

last <- roundToTens(ncol(data)-1) 
subsetSizes <- c(3:9, seq(10, last, 10)) 

svmTrain <- svmTrain("svmRadial", subsetSizes, data, seeds, "AUC") 

私はpickSizeBest行をコメントアウトすると、アルゴリズムは正常に動作します。私はコメントしていない場合しかし、それは次のエラーを与える:

Error in { (from svm.r#58) : task 1 failed - "Stopping" 

行58はsvmProf <- rfe(x = data_x,..

である私がpickSizeBest間違った方法を使用している場合見上げてみましたが、私は、問題を見つけることができません。誰かが私を助けることができますか?

多くの感謝!

編集:pickSizeBest (data, ...)dataを使用しないでください。しかし、私はまだそこに何を追加すべきか分かりません。

答えて

0

つまり、私はあなたの例を実行することはできませんが、私はあなただけの機能pickSizeBestを渡すことを示唆している:

[...]

trControl = TRctrl, 
selectSize = pickSizeBest, 
tuneLength = 5 

[...]

機能はここに記述されています: http://topepo.github.io/caret/recursive-feature-elimination.html#backwards-selection

+0

しかし、私はフィットモーテルを見ると、「正確さはオプティマを選択するために使用されました最大値を用いたモデル。しかし、代わりにAUCを使用したいと思います。 – aqua

+0

私は 'rfe()'の 'metric'引数が渡されると予想していました。私はあなたをさらに助けるために最小限の作業例が必要です。 –

+0

ありがとう、私は、回避策があると思います。私がsvmFuncs $ summaryに3つの関数すべてを渡すのではなく、AUCを計算するprSummaryだけがAUCを使うよりも。また、AUCを使用すると、他のメトリクスを計算するかどうかは関係ありませんが、何らかの理由でそれがうまくいかないことも予想されました。 – aqua

関連する問題