K-Fold 交叉验证-如何计算算法的常规参数/超参数

数据挖掘 机器学习
2021-09-19 01:24:12

K-fold 交叉验证将数据分成 k 个 bin,每次使用 k-1 个 bin 进行训练,1 个 bin 进行测试。性能测量为所有 K 次运行的平均值,err ← err + (y[i] − y_out)^2 如 Wikipedia 和文献中所示

   err ← 0
   for i ← 1, ..., N do
    // define the cross-validation subsets
     x_in ← (x[1], ..., x[i − 1], x[i + 1], ..., x[N])
     y_in ← (y[1], ..., y[i − 1], y[i + 1], ..., y[N])
     x_out ← x[i]
     y_out ← interpolate(x_in, y_in, x_out)
     err ← err + (y[i] − y_out)^2 
   end for
   err ← err/N

但是从训练中获得的参数呢?它是所有训练的平均值,还是从 k 折交叉验证中的最佳输出中挑选出来的?我们是否需要在 k-fold 交叉验证中运行相同的 ML 算法,或者每个折叠可以有不同的算法?我认为我们只需要为 k-fold 运行一种算法,并且对于每个单独的算法,我们需要运行 k-fold 交叉验证。

1个回答

交叉验证是一种获得性能可靠估计的方法。性能是通过 CV“折叠”获得的平均值,因为这样它不依赖于单个测试集,即机会的影响最小化。

在超参数选择的情况下,目标不仅是评估,而且是基于此评估选择超参数值。这将 CV 过程变成了训练阶段,因为它用于确定模型的某些内容。

当目标是在一组可能赋值的超参数中选择最佳超参数时,该方法针对每个可能的赋值运行在所有 CV“折叠”上,然后也为每个赋值获得平均性能在 CV 过程结束时,选择对应于最大平均性能的分配。

既然参数是固定的,仍然需要确定新测试集的真实性能,因为参数分配中的高性能可能是偶然的。这就是为什么使用这些参数再次训练模型(通常使用整个训练数据),然后将其应用于新的测试集以获得最终性能。

请注意,CV 中的所有内容在“折叠”中都以相同的方式完成:每次折叠都运行相同的方法,并且始终在所有“折叠”中获得结果。特别是不应该通过选择最大“折叠”来选择最佳模型或参数。