用于模型参数调整和模型评估的 CV

机器算法验证 交叉验证 随机森林 参数化
2022-03-22 17:05:09

我有一个关于使用交叉验证进行模型参数调整(模型训练)和模型评估(测试)的基本问题,类似于机器学习中的模型调整和模型评估

我知道建议只使用训练集(测试集保持“未见”)来调整模型参数(“mtry”,我使用的是随机森林(RF)),即训练集进一步分为训练集和验证集进行k-fold交叉验证以获得最佳参数值。

但是,如果我希望进行 k 折交叉验证以评估模型准确性(在从整个数据集中采样的不同测试集上测试训练模型),我会感到困惑。是否正确的模型评估程序是:

(1)简单地重新运行RF,CV只使用训练集调整参数'mtry'到不同的训练-测试集分区?虽然只有 1(一个)训练集的实现/分区在开始时用于调整“mtry”?或者我应该使用不同的训练集实现来调整“mtry”吗?

(2) 在不用于调整“mtry”的测试集的 1(一)实现(开始时)的不同引导样本上使用调整后的“mtry”运行 RF?

谢谢你,如果我的写作有点混乱,我很抱歉。

1个回答

简单的规则是用于评估模型性能的数据不应该以任何方式用于优化模型。如果您将所有可用数据拆分为 k 个不相交的子集以用于调整模型的超参数(例如 SVM 的内核和正则化参数),那么您将无法执行无偏性能估计,因为所有数据都影响了超参数的选择。这意味着(1)和(2)都可能是乐观的。

解决方案是使用嵌套交叉验证,其中外部交叉验证用于性能评估。关键是我们要估计整个模型拟合过程的性能,包括调整超参数。因此,您需要在外部交叉验证的每个折叠中包含用于调整模型的所有步骤,在这种情况下,包括使用交叉验证在每个折叠中独立地调整超参数。我写了一篇关于这个主题的论文,你可以在这里找到,第 5.3 节给出了一个例子,说明为什么对模型选择和性能评估执行交叉验证是一个坏主意。