比较插入符号模型对象的最佳功能

Posted

技术标签:

【中文标题】比较插入符号模型对象的最佳功能【英文标题】:Best function to compare caret model objects 【发布时间】:2020-08-13 00:50:20 【问题描述】:

我有许多使用相同数据和调整参数的插入符号模型对象。对于健全性检查,我想看看每种方法是否给了我相同的模型对象。 (这是运行并行处理并确保我的模型相同的更广泛计划的一部分。)

例如,下面,我训练了 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 

如果我比较最终模型而不是插入符号对象,它会返回 TRUE。

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

所以我试图确定为什么插入符号对象不同?或者如果我使用了错误的功能?

我也设置了种子(如本例中:https://***.com/a/21988897/8799325),但仍然遇到同样的问题。

更新: 当我交换不同的模型(例如 rpart、lm)时,使用 finalModel 规范我得到相同()调用的 FALSE 和 all.equal()的 TRUE。使用不同的模型一定有什么关系?

> 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】:

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

all.equal(model1[!names(model1) %in% "times"], model2[!names(model2) %in% "times"])

【讨论】:

你也可以回答这个问题吗? ***.com/questions/61514348/…

以上是关于比较插入符号模型对象的最佳功能的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用插入符号训练模型的时机

R 插入符号保留样本和测试集 ROC

如何在函数中绘制插入符号列车对象

KNA的PCA:插入符号中的预处理参数

summaryFunction 插入符号分类的自定义指标 (hmeasure)

Word 2007插件中的插入符号位置