对不具有相等分区的 k 折交叉验证数据进行分区

机器算法验证 交叉验证
2022-04-01 02:06:44

来自维基百科:

在 k 折交叉验证中,原始样本被随机划分为 k 个大小相等的子样本。

我正在做一个 10 折交叉验证项目。我有一个包含 76 个元素的数据集。这意味着我不能拥有相同大小的分区。

剩余数据的方法是什么(在我的示例 6 数据中)?忽略它们,使数据有 16 个元素,6 个分区有 11 个元素等等?

3个回答

通常折交叉验证子集的大小大致相等。它们不重叠是至关重要的。k

例如,我只是看看 WEKA 做了什么。假设您有个实例和个折叠,那么 r = N \mod kN除以k的余数)是剩余记录的数量。r个分区将有\lfloor N/k \rfloor + 1条记录,其他只有\ lfloor N/k \rfloorNk

r=Nmodk
NkrN/k+1N/k

关于你的例子:

N=76
k=10
r=Nmodk=6

6分区将有N/k+1=7+1=8条记录,其他7条记录。

正如 Simone 所说,通常不需要每个折叠的大小完全相同。有 6 个折叠包含 8 条记录,4 个折叠包含 7 条记录是完全合理的。这可能是一个更好的解决方案,而不是有九个大小的七倍并将多余的推入最后一个。

10 折交叉验证通常是一个相当合理的选择,但您应该知道有很多相关方法(请参阅此线程),其中一些可能是更好的选择,具体取决于您的数据集的具体情况。例如,如果您的类非常不平衡,您可能需要考虑分层交叉验证,它试图将类均匀分布在折叠中(例如,如果您有 16 个 A 类示例,理想情况下它们分布在所有 10折叠,而不是集中在折叠 #1 和 #2 中)。

如果您对交叉验证结果进行推断,其他一些方案,如 5x2 CV,也具有相对较好的属性。

您可能想要使用kfoldcv 函数来计算 k 组的样本大小。

kfoldcv(k, N, nlevel=NULL)

Arguments:
k    number of groups.
N    total sample size.
nlevel   a vector of sample sizes for stratified sampling.

您将必须安装该ipred软件包。