比较 Caret 模型对象的最佳功能

问题描述 投票:1回答:1

我有许多使用相同数据和调整参数的卡雷特模型对象。为了进行理智检查,我想看看每个方法是否给我相同的模型对象。这都是运行并行处理并确保我的模型是相同的更广泛计划的一部分)。

例如,下面,我训练了2个不同的模型,并希望进行比较。

当我比较caret对象时,它返回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 

如果我比较最终模型而不是caret对象,它就会返回TRUE。

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

所以我想知道为什么caret对象是不同的?或者我是否使用了错误的函数?

我也设置了种子(就像这个例子一样。https:/stackoverflow.coma219888978799325)。),但还是有同样的问题。

更新:当我互换不同的模型(如rpart, lm),然后用finalModel规范时,我得到的是false的 identical()调用和true的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
r r-caret model-comparison
1个回答
1
投票

train() 存储运行函数所花费的执行时间,见 model1$times?train. 我认为这些时间与你的目的无关,所以你可以放心地忽略它们。

all.equal(model1[!names(model1) %in% "times"], model2[!names(model2) %in% "times"])
© www.soinside.com 2019 - 2024. All rights reserved.