ユーザー、
pprocessing 時間を節約するために、PLSR 予測を「並列化」するソリューションを探しています。「doPar」で「foreach」コンストラクトを使用しようとしましたが (以下のコードの 2 番目の部分を参照)、予測値とモデル パフォーマンス パラメーター (RMSEP) を出力変数に割り当てることができませんでした。
コード:
set.seed(10000) # generate some data...
mat <- replicate(100, rnorm(100))
y <- as.matrix(mat[,1], drop=F)
x <- mat[,2:100]
eD <- dist(x, method = "euclidean") # distance matrix to find close samples
eDm <- as.matrix(eD)
kns <- matrix(NA,nrow(x),10) # empty matrix to allocate 10 closest samples
for (i in 1:nrow(eDm)) { # identify closest samples in a loop and allocate to kns
kns[i,] <- head(order(eDm[,i]), 11)[-1]
}
これまでのところ、コードは「安全」であると考えていますが、「foreach」構造をこれまで使用したことがないため、次の部分は私に挑戦しています。
library(pls)
library(foreach)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
out <- foreach(j = 1:nrow(mat), .combine="rbind", .packages="pls") %dopar% {
pls <- plsr(y ~ x, ncomp=5, validation="CV", , subset=kns[j,])
predict(pls, ncomp=5, newdata=x[j,,drop=F])
RMSEP(pls, estimate="CV")$val[1,1,5]
}
stopCluster(cl)
私が理解しているように、「RMSEP(pls,...」で始まるコード行は、「予測」コード行から以前に書き込まれたデータを単に上書きしているだけです。どういうわけか、.combine
オプションがこれを処理すると想定していましたか?
助けてくれて本当にありがとうございます!
ベスト、チェガ