train libreria ejemplos r machine-learning data-mining classification adaboost

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.