libreria - Usando adaboost con el paquete caret de R
libreria caret ejemplos (4)
He estado usando el paquete ada
R por un tiempo, y más recientemente, caret
. De acuerdo con la documentación, la función train()
caret
debe tener una opción que use ada. Pero, caret me vomita cuando uso la misma sintaxis que se encuentra dentro de mi llamada ada()
.
Aquí hay una demostración, utilizando el conjunto de datos de muestra de wine
.
library(doSNOW)
registerDoSNOW(makeCluster(2, type = "SOCK"))
library(caret)
library(ada)
wine = read.csv("http://www.nd.edu/~mclark19/learn/data/goodwine.csv")
set.seed(1234) #so that the indices will be the same when re-run
trainIndices = createDataPartition(wine$good, p = 0.8, list = F)
wanted = !colnames(wine) %in% c("free.sulfur.dioxide", "density", "quality",
"color", "white")
wine_train = wine[trainIndices, wanted]
wine_test = wine[-trainIndices, wanted]
cv_opts = trainControl(method="cv", number=10)
###now, the example that works using ada()
results_ada <- ada(good ~ ., data=wine_train, control=rpart.control
(maxdepth=30, cp=0.010000, minsplit=20, xval=10), iter=500)
##this works, and gives me a confusion matrix.
results_ada
ada(good ~ ., data = wine_train, control = rpart.control(maxdepth = 30,
cp = 0.01, minsplit = 20, xval = 10), iter = 500)
Loss: exponential Method: discrete Iteration: 500
Final Confusion Matrix for Data:
Final Prediction
etc. etc. etc. etc.
##Now, the calls that don''t work.
results_ada = train(good~., data=wine_train, method="ada",
control=rpart.control(maxdepth=30, cp=0.010000, minsplit=20,
xval=10), iter=500)
Error in train.default(x, y, weights = w, ...) :
final tuning parameters could not be determined
In addition: Warning messages:
1: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, :
There were missing values in resampled performance measures.
2: In train.default(x, y, weights = w, ...) :
missing values found in aggregated results
###this doesn''t work, either
results_ada = train(good~., data=wine_train, method="ada", trControl=cv_opts,
maxdepth=10, nu=0.1, iter=50)
Error in train.default(x, y, weights = w, ...) :
final tuning parameters could not be determined
In addition: Warning messages:
1: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, :
There were missing values in resampled performance measures.
2: In train.default(x, y, weights = w, ...) :
missing values found in aggregated results
Supongo que es que el tren () quiere información adicional, pero la advertencia arrojada no me da ninguna pista sobre lo que falta. Además, podría estar perdiendo una dependencia, pero no hay ninguna pista sobre lo que debería estar allí ....
Mira hacia arriba ?train
y busca ada
verás que:
Method Value: ada from package ada with tuning parameters: iter, maxdepth, nu (classification only)
Entonces debe perderse el parámetro nu
y el parámetro maxdepth
.
¿Cuál es el tipo de datos en wine$good
? Si es un factor
, intente mencionar explícitamente que es así:
wine$good <- as.factor(wine$factor)
stopifnot(is.factor(wine$good))
Motivo: a menudo, los paquetes R necesitan ayuda para distinguir los escenarios de clasificación frente a regresión, y puede haber algún código genérico dentro de intercalación que pueda identificar erróneamente el ejercicio como un problema de regresión (ignorando el hecho de que ada solo hace la clasificación).
Por favor incluya los parámetros dentro de tuneGrid
Grid <- expand.grid(maxdepth=25,nu=2,iter=100)
results_ada = train(good~., data=wine_train, method="ada",
trControl=cv_opts,tuneGrid=Grid)
Esto funcionará
Así que esto parece funcionar:
wineTrainInd <- wine_train[!colnames(wine_train) %in% "good"]
wineTrainDep <- as.factor(wine_train$good)
results_ada = train(x = wineTrainInd, y = wineTrainDep, method="ada")
results_ada
Boosted Classification Trees
5199 samples
9 predictors
2 classes: ''Bad'', ''Good''
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 5199, 5199, 5199, 5199, 5199, 5199, ...
Resampling results across tuning parameters:
iter maxdepth Accuracy Kappa Accuracy SD Kappa SD
50 1 0.732 0.397 0.00893 0.0294
50 2 0.74 0.422 0.00853 0.0187
50 3 0.747 0.437 0.00759 0.0171
100 1 0.736 0.411 0.0065 0.0172
100 2 0.742 0.428 0.0075 0.0173
100 3 0.748 0.442 0.00756 0.0158
150 1 0.737 0.417 0.00771 0.0184
150 2 0.745 0.435 0.00851 0.0198
150 3 0.752 0.449 0.00736 0.016
Tuning parameter ''nu'' was held constant at a value of 0.1
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were iter = 150, maxdepth = 3 and nu
= 0.1.
Y la razón se encuentra en otra pregunta:
caret :: train: especificar parámetros de generación de modelos
Creo que pasó los parámetros de ajuste como argumentos, cuando el train
está tratando de encontrar los parámetros de ajuste óptimos. Podría definir una grilla de parámetros para una búsqueda en cuadrícula si quisiera definir la suya propia.