无法使用 R 中的 createDataPartition 创建完全相等的数据分区 - 分别获得 1396 和 1398 个观察值,但需要 1397 个
Unable to create exactly equal data partitions using createDataPartition in R- getting 1396 and 1398 observations each but need 1397
我对 R 非常熟悉,但从来没有这种要求,我需要在 R 中使用 createDataPartition 随机创建完全相等的数据分区。
index = createDataPartition(final_ts$SAR,p=0.5, list = F)
final_test_data = final_ts[index,]
final_validation_data = final_ts[-index,]
此代码创建两个数据集,大小分别为 1396 和 1398 个观测值。
我很惊讶为什么 p=0.5 没有做它应该做的事情。它与默认情况下没有奇数个观测值的结果数据集有关吗?
提前致谢!
这与响应变量的案例数有关(final_ts$SAR
在你的案例中)。
例如:
y <- rep(c(0,1), 10)
table(y)
y
0 1
10 10
# even number of cases
现在我们分开:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 10 obs
train
0 1
5 5
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
如果我们用奇数个案例代替构建和示例:
y <- rep(c(0,1), 11)
table(y)
y
0 1
11 11
我们有:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 12 obs.
train
0 1
6 6
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
更多信息here。
这是另一个线程,它解释了为什么从 createDataPartition 编辑的数字 return 对我们来说可能看起来是 "off" 但不是根据此函数试图做的事情。
因此,这取决于您在 final_ts$SAR 中拥有的内容以及数据的传播。
如果它是分类值,例如:T 和 F,如果您总共有 100 个,55 个是 T,45 个是 F。当您在代码中调用方法时,它将 return 你 51 因为:
55*0.5=27.5, 45*0.5=22.5, 四舍五入, 28+23=51.
当你想拆分的值是数字时,你可以参考下面的线程,它对此有很好的解释。
R - caret createDataPartition returns more samples than expected
我对 R 非常熟悉,但从来没有这种要求,我需要在 R 中使用 createDataPartition 随机创建完全相等的数据分区。
index = createDataPartition(final_ts$SAR,p=0.5, list = F)
final_test_data = final_ts[index,]
final_validation_data = final_ts[-index,]
此代码创建两个数据集,大小分别为 1396 和 1398 个观测值。
我很惊讶为什么 p=0.5 没有做它应该做的事情。它与默认情况下没有奇数个观测值的结果数据集有关吗? 提前致谢!
这与响应变量的案例数有关(final_ts$SAR
在你的案例中)。
例如:
y <- rep(c(0,1), 10)
table(y)
y
0 1
10 10
# even number of cases
现在我们分开:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 10 obs
train
0 1
5 5
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
如果我们用奇数个案例代替构建和示例:
y <- rep(c(0,1), 11)
table(y)
y
0 1
11 11
我们有:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 12 obs.
train
0 1
6 6
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
更多信息here。
这是另一个线程,它解释了为什么从 createDataPartition 编辑的数字 return 对我们来说可能看起来是 "off" 但不是根据此函数试图做的事情。 因此,这取决于您在 final_ts$SAR 中拥有的内容以及数据的传播。 如果它是分类值,例如:T 和 F,如果您总共有 100 个,55 个是 T,45 个是 F。当您在代码中调用方法时,它将 return 你 51 因为: 55*0.5=27.5, 45*0.5=22.5, 四舍五入, 28+23=51.
当你想拆分的值是数字时,你可以参考下面的线程,它对此有很好的解释。
R - caret createDataPartition returns more samples than expected