我运行了下面的代码。如果我禁用实例化(如图所示),三个基准实验的结果将会不同,并且关于哪个学习者表现更好的结论也可能不同。
我该如何解决这个问题?一种方法可能是对大量的重采样进行平均。我可以为此编写代码,但也许在调用“benchmark”时这已经是一个选项?
resampling = rsmp("cv", folds=20) #resampling$instantiate(task) # 如果不在这里执行实例化,结果将(并且应该)不同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"))
回答:
在我看来,您可能希望使用重复的交叉验证来最小化分区引入的变异性。
您可以不使用 resampling = rsmp("cv", folds = 20)
,而是使用 resampling = rsmp("repeated_cv", folds = 20, repeats = 100)
,创建100个不同的重采样场景,并在这些场景中对所有学习者进行基准测试。
这是在机器学习中减少单一分区影响的常见方法。