4

同じデータでさまざまな回帰/分類アルゴリズム (つまり、svm、nnet、rpart、randomForest、naiveBayes など) の結果をテストして、どちらがより適切に機能するかを確認したいと考えています。しかし、コードをできるだけ短くきれいにする必要があります。mclapply()すべてのアルゴリズムをテストするために、 packageの単一の呼び出しを使用してそれらを実行したいと思いますmulticore

invisible(lapply(c("party","nnet","caret","klaR","randomForest","e1071","rpart",
                   "multicore"), require, character.only = T))
algorithms <- c(knn3, NaiveBayes, nnet, ctree, randomForest, svm, naiveBayes, rpart)
data(iris)
model <- mclapply(algorithms, function(alg) alg(Species ~ ., iris))

問題は、一部のアルゴリズムが追加のパラメーターを必要とすることです。つまり、nnet()パラメーターsizeを設定する必要があります。確かにこれはいくつかのコマンドで修正できますif,elseが、もっと簡単な解決策はありますか?

4

2 に答える 2

5

あなたができることの1つはalgorithms、追加の引数を必要とするものを部分関数に置き換えることです。

algorithms <- c(knn3, ctree, function(...) nnet(..., size=2))
于 2013-03-28T20:01:19.183 に答える
1

パッケージmulticoreは Windows では利用できないようですが、通常の単純な例を使用して、1 つの方法を示しlapplyます。

# names of the functions as strings
algorithms <- c("lm", "glm")
# arguments for each function (empty list for those which do not need any)
arguments <- list(lm=list(model=FALSE),glm=list(family = gaussian),lm=list())

# Use lapply with do.call
output<-lapply(1:length(algorithms), function(i) do.call(what=algorithms[i],
                    args=c(list(formula=y ~ .,data=freeny),arguments[[i]])))
names(output)<-algorithms #Add names to output

リストoutputには、各アルゴリズムからの出力が含まれています。この例の出力 ( コマンド による) は、 と の出力がサマリーと共に関数呼び出しを示しているoutput$lmため、一見ひどいように見えることに注意してください。関数呼び出しはここではかなり長いです。lmglm

編集:いくつかの小さな調整。

于 2013-03-28T21:03:51.317 に答える