Лучшая функция для сравнения объектов модели каретки - PullRequest
1 голос
/ 29 апреля 2020

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

Например, ниже я обучаю 2 разные модели и хочу сравнить.

Когда Я сравниваю объекты каретки, он возвращает FALSE.

> library(caret)
> 
> set.seed(0)
> myControl <- trainControl(method='cv', index=createFolds(iris$Species))
> 
> set.seed(0)
> model1 <- train(Species~., iris, method='rf', trControl=myControl)
> 
> set.seed(0)
> model2 <- train(Species~., iris, method='rf', trControl=myControl)
> 
> identical(model1,model2)
[1] FALSE
> all.equal(model1,model2)
[1] "Component “times”: Component “everything”: Mean relative difference: 0.09036145"
[2] "Component “times”: Component “final”: Mean relative difference: 0.75"           
> compare_models(model1, model2)

    One Sample t-test

data:  x
t = NaN, df = 9, p-value = NA
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 NaN NaN
sample estimates:
mean of x 
        0 

Если я сравниваю окончательную модель вместо объекта каретки, он возвращает ИСТИНА.

> identical(model1$finalModel,model2$finalModel)
[1] TRUE
> all.equal(model1$finalModel,model2$finalModel)
[1] TRUE

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

Я также установил семена (как в этом примере: { ссылка }) и все еще имею ту же проблему.

ОБНОВЛЕНИЕ: Когда я обмениваюсь различными моделями (например, rpart, lm), тогда со спецификацией finalModel я получаю FALSE для вызова идентичного () и ИСТИНА для all.equal (). Должно быть что-то в использовании разных моделей?

> set.seed(0)
> myControl <- trainControl(method='cv', index=createFolds(iris$Species))
> 
> set.seed(0)
> model3 <- train(Species~., iris, method='rpart', trControl=myControl)
> 
> set.seed(0)
> model4 <- train(Species~., iris, method='rpart', trControl=myControl)
> 
> identical(model3,model4)
[1] FALSE
> all.equal(model3,model4)
[1] "Component “times”: Component “everything”: Mean relative difference: 0.05063291"
[2] "Component “times”: Component “final”: Mean relative difference: 1"              
> compare_models(model3, model4)

    One Sample t-test

data:  x
t = NaN, df = 9, p-value = NA
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 NaN NaN
sample estimates:
mean of x 
        0 

> 
> identical(model3$finalModel,model4$finalModel)
[1] FALSE
> all.equal(model3$finalModel,model4$finalModel)
[1] TRUE

1 Ответ

1 голос
/ 29 апреля 2020

train() хранит время выполнения, необходимое для запуска функции, см. model1$times и ?train. Я думаю, что эти времена не имеют отношения к вашей цели, так что вы можете спокойно их игнорировать:

all.equal(model1[!names(model1) %in% "times"], model2[!names(model2) %in% "times"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...