0

我运行下面的代码。如果我停用实例化(如图所示),我的基准比较结果对于三个基准实验会有所不同,并且哪个学习器表现更好的结论可能会有所不同。

我该如何解决这个问题?一种方法可能是对大量重采样进行平均。我可以为此编写代码,但也许这在调用“基准”时已经是一个选项?

resampling = rsmp("cv", folds=20) 
#resampling$instantiate(task)   # results below will (and shall) differ, if instantiation is not performed here

design = benchmark_grid(
  tasks = task,
  learners = list(glrn_knn_pca, glrn_knn_nopca),
  resamplings = resampling
)

design2 = benchmark_grid(
  tasks = task,
  learners = list(glrn_knn_pca, glrn_knn_nopca),
  resamplings = resampling
)


design3 = benchmark_grid(
  tasks = task,
  learners = list(glrn_knn_pca, glrn_knn_nopca),
  resamplings = resampling
)


bmr = benchmark(design)
bmr2 = benchmark(design2)
bmr3 = benchmark(design3)

bmr$aggregate(msr("classif.auc"))   
bmr2$aggregate(msr("classif.auc"))   
bmr3$aggregate(msr("classif.auc")) 
4

2 回答 2

2

在我看来,您可能希望使用重复的 CV 来最小化分区引入的可变性。

resampling = rsmp("cv", folds = 20)您可以使用resampling = rsmp("repeated_cv", folds = 20, repeats = 100)和创建 100 个不同的重采样场景,并在这些场景中对所有学习者进行基准测试,而不是您。

这是 ML 中减少单个分区影响的常用方法。

于 2021-04-20T18:11:17.493 回答
1

如果您想找出哪个学习器表现更好,仅比较汇总的性能指标是不够的。mlr3benchmark包中实现了基准的统计测试和绘图。

于 2021-04-21T08:50:50.613 回答