2016-06-05 17 views
1

Ich vervollständige die Übungen von Applied Predictive Modeling, das R-Lehrbuch für die caret-Paket, von den Autoren. Ich kann die Funktion train nicht mit den Methoden M5P oder M5Rules arbeiten.RWeka wird nicht mit Caret oder möglicherweise% Dopar arbeiten%

Der Code wird gut laufen manuell:

data("permeability") 
trainIndex <- createDataPartition(permeability[, 1], p = 0.75, 
           list = FALSE) 
fingerNZV <- nearZeroVar(fingerprints, saveMetrics = TRUE) 
trainY <- permeability[trainIndex, 1] 
testY <- permeability[-trainIndex, 1] 
trainX <- fingerprints[trainIndex, !fingerNZV$nzv] 
testX <- fingerprints[-trainIndex, !fingerNZV$nzv] 
indx <- createFolds(trainY, k = 10, returnTrain = TRUE) 
ctrl <- trainControl('cv', index = indx) 

m5Tuner <- t(as.matrix(expand.grid(
    N = c(1, 0), 
    U = c(1, 0), 
    M = floor(seq(4, 15, length.out = 3)) 
))) 
startTime <- Sys.time() 
m5Tune <- foreach(tuner = m5Tuner) %do% { 
    m5ctrl <- Weka_control(M = tuner[3], 
         N = tuner[1] == 1, 
         U = tuner[2] == 1) 
    mods <- lapply(ctrl$index,function(fold) { 
    d <- cbind(data.frame(permeability = trainY[fold]), 
       trainX[fold, ]) 
    mod <- M5P(permeability ~ ., d, control = m5ctrl) 
    rmse <- RMSE(predict(mod, as.data.frame(trainX[-fold, ])), 
       trainY[-fold]) 
    list(model = mod, rmse = rmse) 
    }) 
    mean_rmse <- mean(sapply(mods, '[[', 'rmse')) 
    list(models = mods, mean_rmse = mean_rmse) 
} 
endTime <- Sys.time() 
endTime - startTime 
# Time difference of 59.17742 secs 

Die gleichen Daten und Kontrollen (Swapping 'Regeln' für 'M' - warum kann ich angeben M als Tuning-Parameter nicht?) Nicht Oberfläche:

m5Tuner <- expand.grid(
    pruned = c("Yes", "No"), 
    smoothed = c("Yes", "No"), 
    rules = c("Yes", "No") 
) 
m5Tune <- train(trainX, trainY, 
       method = 'M5', 
       trControl = ctrl, 
       tuneGrid = m5Tuner, 
       control = Weka_control(M = 10)) 

Das Beispiel aus dem Buch nicht beenden, entweder:

library(caret) 
data(solubility) 
set.seed(100) 
indx <- createFolds(solTrainY, returnTrain = TRUE) 
ctrl <- trainControl(method = "cv", index = indx) 

set.seed(100) 
m5Tune <- train(x = solTrainXtrans, y = solTrainY, 
       method = "M5", 
       trControl = ctrl, 
       control = Weka_control(M = 10)) 

Das kann ein Problem bei der Verwendung eines parallelen Backends mit RWeka sein, zumindest für mich. Mein Beispiel von oben endet nicht mit %dopar%.

Ich habe sudo R CMD javareconf vor jedem Beispiel ausgeführt und Rstudio neu gestartet.

sessionInfo() 
R version 3.3.0 (2016-05-03) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Arch Linux 

locale: 
[1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C     
[3] LC_TIME=en_US.UTF-8   LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8  LC_MESSAGES=en_US.UTF-8  
[7] LC_PAPER=en_US.UTF-8   LC_NAME=en_US.UTF-8   
[9] LC_ADDRESS=en_US.UTF-8  LC_TELEPHONE=en_US.UTF-8  
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods 
[7] base  

other attached packages: 
[1] APMBook_0.0.0.9000    RWeka_0.4-27     
[3] caret_6.0-68     ggplot2_2.1.0     
[5] lattice_0.20-30     AppliedPredictiveModeling_1.1-6 
# dozens others loaded via namespace. 

Antwort

1

Wenn eine parallele Verarbeitung mit train und RWeka Modelle verwenden, können Sie den Fehler haben sollte bekommen:

In train.default(trainX, trainY, method = "M5", trControl = ctrl, : 
Models using Weka will not work with parallel processing with multicore/doMC 

Die Schnittstelle zu Weka Java nicht mit mehreren Arbeitern arbeiten.

Es dauert eine Weile, aber der train Anruf wird abgeschlossen, wenn Sie nicht Arbeiter mit foreach

Max

+0

Yep registriert haben. Ich dachte, ich versuchte, DoMC zu lösen, aber vielleicht foreach oder parallel war immer noch beigefügt. Auf jeden Fall ist der Code abgeschlossen. Außerdem war ich mir nicht sicher, was "Regeln" sind. Ich muss mich überzeugt haben, dass ich es zu diesem Zeitpunkt verstanden habe (viele Einstellparameter dieses Kapitels). Alle drei für M5 akzeptieren nur "Ja" oder "Nein". Ich habe die Frage geändert. Gibt es einen Grund, dass 'M' kein Tuning-Parameter ist? Danke - tolles Buch und Software. –