2013-10-11 1 views
8

Я использовал пакет ada R некоторое время, а совсем недавно, caret. Согласно документации, функция carettrain() должна иметь опцию, которая использует ada. Но, карет меня раздражает, когда я использую тот же синтаксис, который сидит внутри моего звонка ada().Использование adaboost wihin R's cartt package

Настоящая демонстрация, используя набор данных образцов 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 

Я предполагаю, что это то, что поезд() хочет дополнительный вход, но предупреждение брошено мне не дает никаких намеков на то, что отсутствует. Кроме того, я мог бы пропустить зависимость, но нет никакого намека на то, что должно быть там ....

ответ

1

Посмотрите ?train и поиск ada вы увидите, что:

Method Value: ada from package ada with tuning parameters: iter, maxdepth, nu (classification only)

Так вы должен отсутствовать параметр nu и параметр maxdepth.

+0

взгляните на последний вызов поезда(), который я сделал - он включает в себя все указанные вами параметры. 'results_ada = train (good ~., data = wine_train, method =" ada ", trControl = cv_opts, maxdepth = 10, nu = 0,1, iter = 50)' – Bryan

+0

также, я попытался вынуть 'trControl = cv_opts', но не было никакой разницы. Все еще получил ошибку. – Bryan

1

Каковы данные в wine$good? Если это factor, попробуйте оговаривая, что это так:

wine$good <- as.factor(wine$factor) 
stopifnot(is.factor(wine$good)) 

Причина: часто, пакетам R нужна помощь в отличительной классификации по сравнению сценариев регрессии, и может быть некоторым общий код внутри каре, который может быть ошибочно определяя упражнение как проблему регрессии (игнорируя тот факт, что ада делает только классификацию).

+0

Я попробовал ваше предложение (явным образом начинаю «вино» в качестве фактора), но я все равно получаю ошибку ... воспроизводит ли приведенный выше пример работы в вашей системе? – Bryan

+0

Наконец-то, попробовав это и извини, я получаю ту же ошибку, что и ты, и не мог понять. method = "rf" работает нормально, но я полагаю, что это не утешение, т. е. вам действительно нужен метод = "ada". – vijucat

+0

Aha, train (up ~., Data = sym [, c (6, 14)], "ada"), без каких-либо предложений о параметрах, работает! – vijucat

2

Так что это, кажется, работает:

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. 

И причина находится в другом вопросе:

caret::train: specify model-generation-parameters

Я думаю, что вы прошли настроечные параметры в качестве аргументов, когда train пытается найти оптимальные параметры настройки. Вы можете определить сетку параметров для поиска сетки, если хотите определить свои собственные.

0

Укажите параметры в tuneGrid

Grid <- expand.grid(maxdepth=25,nu=2,iter=100) 
results_ada = train(good~., data=wine_train, method="ada", 
trControl=cv_opts,tuneGrid=Grid) 

Это будет работать.

Смежные вопросы