在调整 RF 的超参数时调整交叉验证的折叠数是否是个好主意

数据挖掘 随机森林 交叉验证 超参数 超参数调整
2022-03-05 21:18:33

我是数据科学的新手。我正在尝试获得随机森林的最佳模型。不幸的是,我不确定我的想法是否能产生一个好的泛化模型。

1) 我将数据拆分为 TrainingSet (70%) 和 TestSet (30%)

2) 然后随机选择 RandomForest 的超参数和 (2-15) 之间的 CrossValidation 的折叠次数

3)然后我将 TraingSet 数据提取到 RandomForest 学习器

4)然后做模型的交叉验证 - 从交叉验证我得到预测数组

5) 测量 CrossValidation 中针对 TrainSet 中目标的预测的准确性

6) 重复所有步骤并尝试最小化 AccuracyError

这是获得最佳广义模型的好方法吗?

我需要将数据拆分为 TrainSet 和 TestSet 吗?

或者我应该搜索所有数据的最佳超参数和折叠数?我觉得在超参数调整期间使用 k-fold CrossValidation 时不需要拆分数据。

2个回答

我需要将数据拆分为 TrainSet 和 TestSet 吗?

这取决于:

  • 对整个数据集进行交叉验证以获得特定模型的性能是可以接受的,因为在这种情况下,模型总是在看不见的数据上进行测试。
  • 在您的情况下,最佳广义模型/超参数的选择是训练阶段的一部分,所以是的,仅在您的训练集上进行交叉验证然后在一些新数据上测量最终模型的性能是有意义的。这是因为尽管有 CV(尤其是在数据集很小的情况下),最佳超参数的选择(尤其是从大量可能性中)仍然可能部分归因于偶然性,因此对看不见的数据进行测试可以避免高估性能的风险。

然后随机选择 RandomForest 的超参数和 (2-15) 之间的 CrossValidation 的折叠数

通常,k-fold CV 的折叠数 k 并不是超参数的一部分,所以这样做是很不寻常的(据我所知)。风险在于您可能会选择最终模型,部分原因是特定的 k 恰好在训练集上产生了更高的性能。直观来看:更大的训练集更有可能产生更好的模型,而更高的 k 使得 CV 每次折叠都使用更大的训练集。所以更高的 k 很可能人为地提高了性能,只是因为训练集更大。这就是为什么使用相同的 k 来比较不同的超参数更安全,可能对不同的 k 值重复整个过程。此外,对于特定的 k 值,您可以随机重新洗牌分区以最小化 CV 分区中机会的影响。

听起来不错。但是,我假设您对每个折叠进行预测并将它们平均以测试准确性?

调整超参数基本上有三种方法。随机搜索(如您所做)、网格搜索(搜索一系列值)和贝叶斯优化。后者可能效率更高。

这是 BO 的一个很好的资源:http: //krasserm.github.io/2018/03/21/bayesian-optimization/