Укажите параметры для окончательной модели только с кареткой - PullRequest
0 голосов
/ 20 ноября 2018

Контекст

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

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

Мой вопрос

Можно ли указать специфичные для модели параметры, которые будут использоваться только для окончательной модели?

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

Конкретный вариант использования

Допустим, я хочу подогнать bartMachine к некоторым данным и затем использовать окончательную модель в производстве.Я обычно сохранял настроенную модель на диск и загружал ее по мере необходимости.Но я могу сохранить / загрузить только модель bartMachine, которая была сериализована, т.е. мне нужно передать serialize=T в bartMachine через caret::train.

Но это будет сериализовать все Модели, которые очень непрактично.Мне действительно нужно только сериализовать окончательную модель.Есть ли способ сделать это?

library("caret")
library("bartMachine")
tgrid <- expand.grid(num_trees = 100,
                       k = c(2, 3),
                       alpha = 0.95, 
                       beta = 2,
                       nu =  3)
# The printed log shows that all intermediate models are being serialized
fit <- train(hp ~ ., 
             data=mtcars, 
             method="bartMachine",
             serialize=T,
             tuneGrid=tgrid,
             trControl = trainControl(method="cv", 5, verboseIter=T))

1 Ответ

0 голосов
/ 20 ноября 2018

Чтобы приспособить модели ко всему набору данных без настройки параметров или повторной выборки, измените метод управления поездом на «none»:

tgrid <- expand.grid(num_trees = 100,
                     k = 2,
                     alpha = 0.95, 
                     beta = 2,
                     nu =  3)
fit <- train(hp ~ ., 
             data=mtcars, 
             method="bartMachine",
             serialize=TRUE,
             tuneGrid=tgrid,
             trControl = trainControl(method="none"))

Обратите внимание, что я удалил одно из двух значений k в коде вопроса.В противном случае возникает ошибка: Only one model should be specified in tuneGrid with no resampling.Я предлагаю построить отдельную модель с другим значением k.

Приведенный выше код дает следующий вывод:

bartMachine initializing with 100 trees...
bartMachine vars checked...
bartMachine java init...
bartMachine factors created...
bartMachine before preprocess...
bartMachine after preprocess... 11 total features...
bartMachine sigsq estimated...
bartMachine training data finalized...
Now building bartMachine for regression ...
building BART with mem-cache speedup...
Iteration 100/1250  mem: 17.6/477.1MB
Iteration 200/1250  mem: 25.1/477.1MB
Iteration 300/1250  mem: 30.8/477.1MB
Iteration 400/1250  mem: 39.9/477.1MB
Iteration 500/1250  mem: 19/477.1MB
Iteration 600/1250  mem: 59.6/477.1MB
Iteration 700/1250  mem: 39.6/477.1MB
Iteration 800/1250  mem: 79.8/477.1MB
Iteration 900/1250  mem: 119.9/477.1MB
Iteration 1000/1250  mem: 40.7/477.1MB
Iteration 1100/1250  mem: 80.8/477.1MB
Iteration 1200/1250  mem: 121/477.1MB
done building BART in 1.289 sec 

burning and aggregating chains from all threads... done
evaluating in sample data...done
serializing in order to be saved for future R sessions...done

Параметру serialize присвоено значение TRUE в fit$finalModel:

fit$finalModel$serialize
[1] TRUE

Несмотря на это, внутренняя функция check_serialization в bartMachine не выдает никаких предупреждений или ошибок (или любых других выходных данных):

bartMachine:::check_serialization(fit$finalModel)

Мне не понятно, как извлечь сериализованный объектот fit$finalModel.Я предполагаю, что он хранится в fit$finalModel$java_bart_machine, который содержит указатель rJava.Возможно получить дальнейшее понимание, используя пакет rJava, от которого зависит bartMachine.

Обновление: состояния @ antoine-sac в комментариях ниже "serialize = T не вызывает сохранение модели, а сериализацию образцовв модель, что означает, что они сохраняются при записи модели на диск ".

...