2016-08-03 12 views
1

Я написал функцию внутри lapply для установки GAM (со сплайнами) для каждого элемента в векторе переменных ответа в кадре данных. Я решил использовать caret для установки моделей вместо прямого использования mgcv или пакета gam, потому что я хотел бы, в конечном счете, разделить свои данные на поезд/тестовый набор для проверки и использовать различные методы повторной дискретизации. На данный момент, я просто метод trainControl установлен в «None», как так:Метод GAM без повторной выборки в карете создает ошибку стоп-кода

# Set resampling method 
    # tc <- trainControl(method = "boot", number = 100) 
    # tc <- trainControl(method = "repeatedcv", number = 10, repeats = 1) 
    tc <- trainControl(method = "none") 

    fm <- lapply(group, function(x) { 
    printFormula <- paste(x, "~", inf.factors) 
    inputFormula <- as.formula(printFormula) 
    # Partition input data for model training and testing 
    # dpart <- createDataPartition(mdata[,x], times = 1, p = 0.7, list = FALSE) 
    # train <- mdata[ data.partition, ] 
    # test <- mdata[ -data.partition, ] 

    cat("Fitting:", printFormula, "\n") 
    # gam(inputFormula, family = binomial(link = "logit"), data = mdata) 
    train(inputFormula, family = binomial(link = "logit"), data = mdata, method = "gam", 
     trControl = tc) 
}) 

Когда я выполняю этот код, я получаю следующее сообщение об ошибке:

Error in train.default(x, y, weights = w, ...) : 
    Only one model should be specified in tuneGrid with no resampling 

Если я повторно запустить код в режиме отладки, я могу найти, где caret останавливает процесс обучения:

if (trControl$method == "none" && nrow(tuneGrid) != 1) 
    stop("Only one model should be specified in tuneGrid with no resampling") 

Очевидно, что функция train терпит неудачу из-за второго условия, б ut, когда я просматриваю tuning parameters for a GAM (со сплайнами), есть только опция выбора функции (не заинтересована, я хочу сохранить все предиктора в модели) и метод. Следовательно, я не включаю фрейм данных tuneGrid, когда звоню train. Это причина, по которой модель не работает таким образом? Какой параметр я должен предоставить и как будет выглядеть tuneGrid?

Я должен добавить, что модель успешно прошла обучение, когда я использую загрузку или k-кратное CV, однако эти методы передискретизации занимают гораздо больше времени, чтобы рассчитать, и мне не нужно их использовать.

Любая помощь по этому вопросу будет оценена по достоинству!

ответ

2

Для этой модели, настройка сетки выглядит более двух значений select параметров:

> getModelInfo("gam", regex = FALSE)[[1]]$grid 
function(x, y, len = NULL, search = "grid") { 
    if(search == "grid") { 
     out <- expand.grid(select = c(TRUE, FALSE), method = "GCV.Cp") 
    } else { 
     out <- data.frame(select = sample(c(TRUE, FALSE), size = len, replace = TRUE), 
         method = sample(c("GCV.Cp", "ML"), size = len, replace = TRUE)) 
    } 
    out[!duplicated(out),] 
} 

Вы должны использовать что-то вроде tuneGrid = data.frame(select = FALSE, method = "GCV.Cp") оценивать только одну модель (как говорит сообщение об ошибке).

+1

Мне удалось успешно подогнать модели GAM с использованием параметров настройки, которые вы предложили. Я понимаю, что выбор функции отключен и поиск GCV.Cp. Я вижу, что он передается функции 'gam' в пакете' mgcv'. В будущем, какой источник может пользователь проконсультироваться по параметрам параметров настройки? На веб-сайте GitHub я думаю, что документация может по крайней мере связать пользователя с потенциальными параметрами параметров настройки. Это всего лишь мои два цента. Спасибо за вашу помощь, я уверен, что у меня будет больше в будущем! – user2109092