当给定数据集D对于简单的训练/测试或训练/验证分割而言太小难以产生泛化误差的准确性时(因为在小的测试集上L可能具有过高的方差),K-折交叉验证算法可以用于估计学习算法A的泛化误差。数据集D包含的元素是抽象的样本z(i)(对于第i个样本),在监督学习的情况代表(输入,目标)对z(i)=(x(i),y(i)),或者无监督学习的情况下仅用于输入z(i)=x(i)。该算法返回D中每个示例的误差向量e,其均值是估计的泛化误差。单个样本上的误差可用于计算平均值周围的置信区间。虽然这些置信区间在使用交叉验证之后不能很好地证明,但是通常的做法是只有当算法A误差的置信区间低于并且不与算法B的置信区间相交时,我们才声明算法A比算法B更好。
/*************************************************************************************************************************************************************************************/
Define KFoldxv(D,A,L,k);
Require:D为给定数据集,其中元素为z(i)
Require:A为学习算法,可视为一个函数(使用数据集作为输入,输出一个学好的函数)
Require:L为损失函数,可视为来自学好的函数f,将样本z(i)∈D映射到R中标量的函数
Require:k为折数
将D分为k个互斥子集Di,它们的并集为D(互斥:A∩B为空)
for i from 1 to k do
fi=A(D\Di) (差集,元素包含于D但不包含于Di)
for z(i) in Dido
ej=L(fi,z(j))
end for
end for
Return e
/*************************************************************************************************************************************************************************************/