如何根据中心划分训练/测试数据集?

我有一个数据集,包含3个预测变量(P1-P3)和1个作为结果的响应变量(Response)。数据来自5个中心(共200个ID)。我将整个数据集分为训练集(70%)和测试集(30%)。

样本数据:

ID  Centers   P1    P2  P3  ResponseID1 Center1   12    1   1   Class1ID2 Center2   73    1   3   Class2ID3 Center3   56    2   1   Class1ID4 Center1   44    1   3   Class2ID5 Center4   33    1   1   Class1ID6 Center5   26    1   1   Class2ID7 Center2   61    1   1   Class1ID8 Center3   44    1   3   Class2ID9 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_bydplyr::sample_n来处理。我需要按组平衡训练和测试数据,并且test数据集是我的数据中不包含在train数据集中的个体子集。

例如,使用著名的mtcars数据集:

library(dplyr)mtcars %>%              # 在你的情况下是你的数据    group_by(cyl) %>%   # 在你的情况下是Centers    sample_n(2)         # 这里是每个组的样本数量

因此,变成了:

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)

希望这对你有帮助。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注