如何根据中心划分 train/test 数据集?
How to partition train/test data set based on the centers?
我有一个数据集,其中包含 3 个预测变量 (P1-P3) 和 1 个响应变量作为结果(响应)。数据是从 5 个中心(200 个 ID)收集的。我将整个数据拆分为 Train(70%) 和 Test(30%)。
Sample data:
ID Centers P1 P2 P3 Response
ID1 Center1 12 1 1 Class1
ID2 Center2 73 1 3 Class2
ID3 Center3 56 2 1 Class1
ID4 Center1 44 1 3 Class2
ID5 Center4 33 1 1 Class1
ID6 Center5 26 1 1 Class2
ID7 Center2 61 1 1 Class1
ID8 Center3 44 1 3 Class2
ID9 Center5 45 1 1 Class1
我想要考虑中心和 类 结果变量的训练和测试数据集的分区,我可以写的是
library(caret)
set.seed(123)
train.index <- createDataPartition(data$Response, p = .7, list = FALSE)
train <- data[ train.index,]
test <- data[-train.index,]
如何编写分区从所有中心选择数据的代码?
也许这不是完美的答案,但我遇到了类似的问题,我使用 dplyr::group_by
和 dplyr::sanple_n
来管理它。我需要按组平衡训练和测试,以及一个 test
数据集,它是我数据的一个子集,不在 train
数据集中的个人。
例如,使用著名的 mtcars
数据集:
library(dplyr)
mtcars %>% # in your case your data
group_by(cyl) %>% # in your case Centers
sample_n(2) # here the numbers of the sample for each group
所以变成:
train <- data %>% group_by(Centers) %>% sample_n(28)
这意味着如果您有 200 行和 5 个中心,并且每个中心的人数相同(我们称之为平衡),则每个组有 200/5 = 40,因此 sample_n
没有重复最多可以是 40。
在每组数据平衡的情况下,如果我的数学没有错,你可以设置为28(200/100*70/5),以获得70%的覆盖率,每组平衡。
如果分组不平衡,不重复可以把参数放到最小的分组。
反之,则必须设置重复次数。
要设置测试,如果你想有不在训练中的个体,你可以这样做:
test <- data %>% filter(!ID %in% train%ID)
希望对您有所帮助。
我有一个数据集,其中包含 3 个预测变量 (P1-P3) 和 1 个响应变量作为结果(响应)。数据是从 5 个中心(200 个 ID)收集的。我将整个数据拆分为 Train(70%) 和 Test(30%)。
Sample data:
ID Centers P1 P2 P3 Response
ID1 Center1 12 1 1 Class1
ID2 Center2 73 1 3 Class2
ID3 Center3 56 2 1 Class1
ID4 Center1 44 1 3 Class2
ID5 Center4 33 1 1 Class1
ID6 Center5 26 1 1 Class2
ID7 Center2 61 1 1 Class1
ID8 Center3 44 1 3 Class2
ID9 Center5 45 1 1 Class1
我想要考虑中心和 类 结果变量的训练和测试数据集的分区,我可以写的是
library(caret)
set.seed(123)
train.index <- createDataPartition(data$Response, p = .7, list = FALSE)
train <- data[ train.index,]
test <- data[-train.index,]
如何编写分区从所有中心选择数据的代码?
也许这不是完美的答案,但我遇到了类似的问题,我使用 dplyr::group_by
和 dplyr::sanple_n
来管理它。我需要按组平衡训练和测试,以及一个 test
数据集,它是我数据的一个子集,不在 train
数据集中的个人。
例如,使用著名的 mtcars
数据集:
library(dplyr)
mtcars %>% # in your case your data
group_by(cyl) %>% # in your case Centers
sample_n(2) # here the numbers of the sample for each group
所以变成:
train <- data %>% group_by(Centers) %>% sample_n(28)
这意味着如果您有 200 行和 5 个中心,并且每个中心的人数相同(我们称之为平衡),则每个组有 200/5 = 40,因此 sample_n
没有重复最多可以是 40。
在每组数据平衡的情况下,如果我的数学没有错,你可以设置为28(200/100*70/5),以获得70%的覆盖率,每组平衡。
如果分组不平衡,不重复可以把参数放到最小的分组。
反之,则必须设置重复次数。
要设置测试,如果你想有不在训练中的个体,你可以这样做:
test <- data %>% filter(!ID %in% train%ID)
希望对您有所帮助。