如何从R语言生成的指定矩阵中划分3折交叉验证数据集?
3折交叉验证的矩阵数据划分方案(R语言实现)
嘿,这就帮你搞定3折交叉验证的数据划分!先理清楚咱们的基础情况:
你已经用这段代码生成了目标矩阵:
mat = matrix(sample.int(10, 9*100, TRUE), 6, 10)
生成的矩阵具体如下:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 10 10 9 3 3 3 4 4 3 9 [2,] 9 3 5 1 3 9 5 5 4 8 [3,] 7 6 6 3 8 2 3 10 7 4 [4,] 7 4 10 8 7 5 2 6 2 8 [5,] 9 7 7 5 3 9 5 8 7 8 [6,] 3 3 1 2 9 3 6 7 6 9
实现3折划分的代码方案
因为你的矩阵刚好有6行,完美可以平均分成3组(每组2行)。下面是直接可用的划分代码,支持固定顺序或随机划分:
# 生成基础折数索引(每组2行) fold_indices = rep(1:3, each = nrow(mat)/3) # 可选:如果需要随机划分,解开下面这行注释 # fold_indices = sample(fold_indices) # 提取每个折的矩阵 fold1 = mat[fold_indices == 1, ] fold2 = mat[fold_indices == 2, ] fold3 = mat[fold_indices == 3, ]
各折的结果示例
Fold 1(按顺序划分的结果):
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 10 10 9 3 3 3 4 4 3 9 [2,] 9 3 5 1 3 9 5 5 4 8
Fold 2(按顺序划分的结果):
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 7 6 6 3 8 2 3 10 7 4 [2,] 7 4 10 8 7 5 2 6 2 8
Fold 3(按顺序划分的结果):
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 9 7 7 5 3 9 5 8 7 8 [2,] 3 3 1 2 9 3 6 7 6 9
如果需要更贴合交叉验证的随机性要求,只需要启用代码里的sample(fold_indices)步骤,每次运行都会得到不同的行分配组合。
内容的提问来源于stack exchange,提问作者Ville




