2017-07-22 4 views
1

Ich versuche, Vorhersagemodell in Caret-Paket in R zu erstellen und Vorhersage für neue Daten von Terminal/cmd aufzurufen. Hier ist reproduzierbar Beispiel:Rscript - lange Ausführungszeit

# 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") 

Und hier ist Skript von Rscript.exe aufzurufen:

# 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) 

ich dies mit folgenden Anweisung in Terminal ausgeführt:

[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 

Gibt es eine Möglichkeit um es schneller/effizienter zu machen? Gibt es zum Beispiel die Möglichkeit, Pakete nicht bei jeder Ausführung zu laden? Ist readRDS korrekt für das Lesen von Modellen in diesem Fall?

+1

Profilieren Sie Ihren Code. – Roland

Antwort

1

Sie können versuchen, Ihren Code mit dem „profvis“ Paket zum Profil:

#library(profvis) 
profvis({  

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

}) 

Ich habe versucht, und es kommt vor, dass 99% der Ausführungszeit Trainingszeit ist, 1% ist das Speichern/Laden RDS-Daten, und der Rest kostet etwa 0 (Ladepakete, Laden von Daten, ...):

enter image description here

Also, wenn Sie nicht wollen, die Trainingsfunktion selbst zu optimieren, wie es scheint Sie haben nur sehr wenige Möglichkeiten zu reduzieren Ausführungszeit.

+0

Zeit der Trainingsfunktion ist hier nicht von großer Bedeutung. Sobald ich das Modell gelernt habe, benutze ich das nur in * readRDS * -Funktion. Ich kümmere mich nur um die Zeit der Ausführung script.R in der Konsole. Aber danke für profvis Paket jetzt sehe ich, dass 1,5 von 2,2 sec Modell liest. – Glaud

0

Ich habe gesehen, dass dies für PLS-Klassifikationsmodelle auftreten, und ich bin mir nicht sicher über das Problem. Versuchen Sie es stattdessen mit method = "simpls". Sie erhalten ungefähr die gleichen Antworten und es sollte schnell abgeschlossen werden.