2017-07-22 2 views
1

Rのキャレットパッケージで予測モデルを作成しようとしていて、端末/ cmdから新しいデータを予測しています。ここでは再現性の例である:Rscript - 実行時間が長い

# Sonar_training.R 
    ## learning and saving model 
library(caret) 
library(mlbench) 
data(Sonar) 
set.seed(107) 
inTrain <- createDataPartition(y = Sonar$Class, p = .75,list = FALSE) 
training <- Sonar[ inTrain,] 
testing <- Sonar[-inTrain,] 
saveRDS(testing,"test.rds") 
ctrl <- trainControl(method = "repeatedcv", 
       repeats = 3) 
plsFit <- train(Class ~ .,data = training,method = "pls", 
      tuneLength = 15, 
      trControl = ctrl, 
      preProc = c("center", "scale")) 

plsClasses <- predict(plsFit, newdata = testing) 

saveRDS(plsFit,"fit.rds") 

そしてここRscript.exeで起動するためのスクリプトです:私は、次の文を使用して、端末でこれを実行する

# script.R 
    ##reading model and predict test data 
t <- Sys.time() 
pls <- readRDS("fit.rds") 
testing <- readRDS("test.rds") 
head(predict(pls, newdata = testing)) 
print(Sys.time() - t) 

[email protected]:~$ Rscript script.R 
Loading required package: pls 

Attaching package: ‘pls’ 

The following object is masked from ‘package:stats’: 

loadings 

[1] M M R M R R 
Levels: M R 
Time difference of 2.209697 secs 

方法はありますより速く/より効率的にするには?例えば、実行ごとにパッケージをロードしない可能性はありますか? readRDSは、この場合のモデルの読み込みに適していますか?

+1

コードをプロファイルします。 – Roland

答えて

1

あなたは「profvis」パッケージにあなたのコードをプロファイリングしようとすることができます:

#library(profvis) 
profvis({  

    for (i in 1:100){ 
    #your code here 
    } 

}) 

私が試したし、実行時間の99%は、トレーニング時間で、1%は、/ロードRDSデータを保存していることが起こりますそして残りは約0(ロードパッケージ、データのロード、...)コスト:

enter image description here

を使用すると、トレーニング機能自体を最適化したくないのであれば、あなたが減らすために非常にいくつかの方法を持っているようです実行時間。

+0

ここでトレーニングの時間は重要ではありません。いったんモデルを学ぶと、これは* readRDS *関数でのみ使用します。私はコンソールで実行script.Rの時間だけ気にします。しかし、プロビジョーパッケージに感謝します。2.2秒の1.5がモデルを読んでいることがわかりました。 – Glaud

0

これはPLS分類モデルで発生することがわかりましたが、私はその問題についてはわかりません。ただし、代わりにmethod = "simpls"を使用してみてください。おおよそ同じ答えが得られ、すぐに完了するはずです。

関連する問題