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

时间:2014-09-29 08:52:09

标签: r matlab machine-learning dataset classification

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

2 个答案:

答案 0 :(得分:5)

在Matlab中使用colon-operator

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

您也可以在不setdiff的情况下执行此操作:

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

答案 1 :(得分:3)

中,您只需使用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, ]