随机分配给 training/testing 数据集时,将 R 数据框中的行分组在一起
Grouping rows from an R dataframe together when randomly assigning to training/testing datasets
我有一个由 X 行块组成的数据框,每行对应一个人(其中每个人的 X 可以不同)。我想将这些人随机分配到训练、测试和验证样本中,但到目前为止我还无法获得正确的语法以确保用户的 X 行中的每一个始终被收集到同一个子样本中。
例如,数据可以简化为:
user feature1 feature2
1 "A" "B"
1 "L" "L"
1 "Q" "B"
1 "D" "M"
1 "D" "M"
1 "P" "E"
2 "A" "B"
2 "R" "P"
2 "A" "F"
3 "X" "U"
... ... ...
然后,如果我最终将用户随机分配给训练、测试或验证集,则该用户的所有行(用户编号是唯一的)将在同一组中,并分组在一起,这样如果例如,用户 1 在训练集中,那么格式仍然是:
user feature1 feature2
1 "A" "B"
1 "L" "L"
1 "Q" "B"
1 "D" "M"
1 "D" "M"
1 "P" "E"
作为奖励,我很想知道这个解决方案是否可以扩展为进行 k 折交叉验证,但到目前为止我什至还没有想出这个更简单的第一步。
提前致谢。
我们可以先建立一个索引来表示每组数据。我选择了测试:60%、训练:40%、验证:10%,但您可以使用 sample
的 prob=
参数选择您需要的比率。然后我们将数据框拆分为user
。最后,我们 rbind
基于我们创建的索引的用户。然后我们可以调用 all_dfs[['train']]
等等:
indx <- sample(1:3, length(unique(df$user)), replace=TRUE, prob=c(.6,.4,.1))
s <- split(df, df$user)
all_dfs <- lapply(1:3, function(x) do.call(rbind, s[indx==x]))
names(all_dfs) <- c('train', 'test', 'validation')
我有一个由 X 行块组成的数据框,每行对应一个人(其中每个人的 X 可以不同)。我想将这些人随机分配到训练、测试和验证样本中,但到目前为止我还无法获得正确的语法以确保用户的 X 行中的每一个始终被收集到同一个子样本中。
例如,数据可以简化为:
user feature1 feature2
1 "A" "B"
1 "L" "L"
1 "Q" "B"
1 "D" "M"
1 "D" "M"
1 "P" "E"
2 "A" "B"
2 "R" "P"
2 "A" "F"
3 "X" "U"
... ... ...
然后,如果我最终将用户随机分配给训练、测试或验证集,则该用户的所有行(用户编号是唯一的)将在同一组中,并分组在一起,这样如果例如,用户 1 在训练集中,那么格式仍然是:
user feature1 feature2
1 "A" "B"
1 "L" "L"
1 "Q" "B"
1 "D" "M"
1 "D" "M"
1 "P" "E"
作为奖励,我很想知道这个解决方案是否可以扩展为进行 k 折交叉验证,但到目前为止我什至还没有想出这个更简单的第一步。
提前致谢。
我们可以先建立一个索引来表示每组数据。我选择了测试:60%、训练:40%、验证:10%,但您可以使用 sample
的 prob=
参数选择您需要的比率。然后我们将数据框拆分为user
。最后,我们 rbind
基于我们创建的索引的用户。然后我们可以调用 all_dfs[['train']]
等等:
indx <- sample(1:3, length(unique(df$user)), replace=TRUE, prob=c(.6,.4,.1))
s <- split(df, df$user)
all_dfs <- lapply(1:3, function(x) do.call(rbind, s[indx==x]))
names(all_dfs) <- c('train', 'test', 'validation')