随机分配给 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 折交叉验证,但到目前为止我什至还没有想出这个更简单的第一步。
提前致谢。
你可以使用 sample():
# 60 % for training, 20% for testing & validation
indeces <- sample(1:nrow(df),nrow(df)*0.6)
df.train <- df[indeces,]
df <- df[-indeces,]
indeces <- sample(1:nrow(df),nrow(df)*0.5)
df.test <- df[indeces,]
df.validate <- df[-indeces,]
对于 k 折交叉验证:
library(caret)
library(mlbench)
fld <- createFolds(df$your_dependent_variable, k= 10,list = TRUE, returnTrain = FALSE)
以上代码将数据分成 10 份。 运行 您在每个样本上的模型并对其进行验证。
已编辑:
user.df <- split( df , f = df$user )
这会生成一个单独的数据框,其中包含特定用户的数据。使用 user.df[[1]]
单独访问它们。
我有一个由 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 折交叉验证,但到目前为止我什至还没有想出这个更简单的第一步。
提前致谢。
你可以使用 sample():
# 60 % for training, 20% for testing & validation
indeces <- sample(1:nrow(df),nrow(df)*0.6)
df.train <- df[indeces,]
df <- df[-indeces,]
indeces <- sample(1:nrow(df),nrow(df)*0.5)
df.test <- df[indeces,]
df.validate <- df[-indeces,]
对于 k 折交叉验证:
library(caret)
library(mlbench)
fld <- createFolds(df$your_dependent_variable, k= 10,list = TRUE, returnTrain = FALSE)
以上代码将数据分成 10 份。 运行 您在每个样本上的模型并对其进行验证。
已编辑:
user.df <- split( df , f = df$user )
这会生成一个单独的数据框,其中包含特定用户的数据。使用 user.df[[1]]
单独访问它们。