如何将数据集中的每 5 个样本分配为测试数据集,将其余样本分配为训练数据集?

Posted

技术标签:

【中文标题】如何将数据集中的每 5 个样本分配为测试数据集,将其余样本分配为训练数据集?【英文标题】:How can I assign every 5th sample in my dataset as a Testing dataset and the rest of the samples as the training dataset? 【发布时间】:2014-11-23 14:40:10 【问题描述】:

我有一个包含 133 个样本(133 行和 2 个列(属性))的数据集。我需要从 1(第 1、第 6、第 11、第 16 ......等)开始分配每 5 个样本作为测试数据集,其余的作为训练数据集。我该怎么做?

【问题讨论】:

类似split(mydf, rownames(mydf) %in% seq(1, 133, by = 5))? 【参考方案1】:

在 Maltab 中使用 colon-operator:

testset = dataset(1:5:end,:)
trainingset = setdiff(dataset, testset, 'rows')

你也可以不使用setdiff

testset = dataset(1:5:end,:)
trainingset = dataset;
trainingset(1:5:end, :) = [];

【讨论】:

【参考方案2】:

在r 中,您可以使用seq 来生成要保留的行序列。然后,您可以采用基于[ 的基本子集,也可以使用%in% 将数据集分成两部分。

这是后者的一个示例,带有一些示例数据:

set.seed(1)
mydf <- data.frame(matrix(rnorm(266), ncol = 2))
mySamples <- setNames(split(mydf, rownames(mydf) %in% seq(1, 133, by = 5)),
                      c("training", "testing"))
str(mySamples)
# List of 2
#  $ training:'data.frame':  106 obs. of  2 variables:
#   ..$ X1: num [1:106] 0.184 -0.836 1.595 0.33 0.487 ...
#   ..$ X2: num [1:106] 0.3066 -1.5364 -0.301 -0.5283 -0.0569 ...
#  $ testing :'data.frame': 27 obs. of  2 variables:
#   ..$ X1: num [1:27] -0.6265 -0.8205 1.5118 -0.0449 0.919 ...
#   ..$ X2: num [1:27] -1.518 -0.652 -0.464 -1.286 -0.929 ...

这是使用 [ 的另一种稍微手动的方法:

testingRows  <- seq(1, 133, by = 5)
trainingRows <- setdiff(sequence(nrow(mydf)), testingRows)
testing  <- mydf[testingRows, ]
training <- mydf[trainingRows, ]

【讨论】:

以上是关于如何将数据集中的每 5 个样本分配为测试数据集,将其余样本分配为训练数据集?的主要内容,如果未能解决你的问题,请参考以下文章

python如何配对样本

如何解决 Python 中的开放集分类问题?

将训练集和测试集的数据除以训练集中的所有主题

当给定特定类的 0 个样本时,如何对不平衡的数据集进行分类?

划分训练、测试集和数据观察

获取预测模型在测试集中预测错误的数据样本