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.
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. –