こんにちは、R でのcforestの並列化に問題があります。
partyパッケージのcforest関数を使用して分類モデルを作成しようとしています。これをコンピューターの複数のコアで並行して実行したいと考えています。randomForestアルゴリズムと .combine および foreach を組み合わせて、これを既に成功させました。
library(doParallel)
library(foreach)
library(randomForest)
library(party)
cl <- (5)
registerDoParallel(cl)
set.seed(1234)
abs_pos_dat_all <- read.csv('all_abs_pos_predictors_3_20_13_for_R.txt');
abs_pos_dat <- abs_pos_dat_all[1:10000,]
train_test_indices <- sample(2,nrow(abs_pos_dat), replace=TRUE, prob=c(.7,.3));
ref_polarity_dat <- read.table('ref_polarity_3_20_13_for_R.txt');
ref_polarity_dat <- factor(ref_polarity_dat[1:10000,])
ref_polarity_train <- ref_polarity_dat[train_test_indices==1]
abs_pos_train[,1] <- ordered(abs_pos_train[,1], labels = c("Buried","Part buried","Exposed"))
abs_pos_train[,2] <- ordered(abs_pos_train[,2], labels = c("Helix","Strand","Other"))
Flank_FA_labels <- c("bur bur","bur part","part part","bur exp","part exp", "exp exp")
Flank_Struc_labels <- c("helix helix","helix strand","strand strand","helix other","strand other", "other other")
Flank_Polarity_labels <- c("polar polar", "polar nonpolar", "non polar non polar" )
for(i in 1:length(Flank_FA_labels)){
abs_pos_train[,i] <- ordered(abs_pos_train[,2+i], labels = Flank_FA_labels)
abs_pos_train[,8+i] <- ordered(abs_pos_train[,8+i], labels = Flank_Polarity_labels)
abs_pos_train[,14+i] <- ordered(abs_pos_train[,14+i], labels = Flank_Struc_labels)
}
colnames(abs_pos_train) <- c("ref_FA", "ref_struc", "Np1Flank_FA", "Np2Flank_FA", "Np3Flank_FA", "Np4Flank_FA", "Np5Flank_FA", "Np6Flank_FA", "Np1Flank_Struc", "Np2Flank_Struc", "Np3Flank_Struc", "Np4Flank_Struc", "Np5Flank_Struc", "Np6Flank_Struc", "Np1Flank_P_NP","Np2Flank_P_NP", "Np3Flank_P_NP", "Np4Flank_P_NP", "Np5Flank_P_NP", "Np6Flank_P_NP")
abs_pos_random_forest <<- foreach(ntree=rep(100, 5), .combine=combine, .packages='randomForest') %dopar% randomForest(ref_polarity_train~.,data = abs_pos_train, ntree=ntree)
ただし、 cforestで同じ構文を使用すると、次のエラーが発生します。
abs_pos_inference_random_forest <<- foreach(ntree=rep(20, 6),
.combine=combine , .packages='party') %dopar% cforest(ref_polarity_train~.,
data = abs_pos_train, controls = cforest_unbiased(ntree=ntree, mtry = 1))
error calling combine function:
<simpleError in fun(result.1, result.2):
Argument must be a list of randomForest objects>
.combine が cforestオブジェクトの代わりに randomForest オブジェクトを探している理由、または少なくとも、.combine が単一の関数のすべての出力である場合に、結合されているオブジェクトのタイプを自動的に認識しない理由を理解できません。