【问题标题】:Split data into train and test stratified on label将数据拆分为按标签分层的训练和测试
【发布时间】:2021-02-03 17:05:54
【问题描述】:

我有一个包含两列(数字和字母)的数据框 (df)。请参阅可重现的示例:

Numbers<- c(2.370653,3.811336,5.255120, 6.501197,7.848100,9.343938,10.843479,12.164387,13.476807,14.922644,16.419281,17.664224,19.112835,20.660367,21.962732,23.213675)
Letters<-c("a","b","c","c","d","a","b","d","d","a","a","c","b","c","c","c")
df <- as.data.frame(cbind(Numbers,Letters))

我希望随机将数据框拆分为两个相等大小的日期框,每个日期框的字母数相同。我发现 stratified() 函数采用每个字母的 50% 的样本:

test <- stratified(df, "Letters", .5)

但这与将数据帧拆分为两个数据帧并不完全相同。我不希望两个数据框中的 df$Numbers 有任何相同的值——每个数据框中的 df$Letters 数量相同。你能帮帮我吗?

【问题讨论】:

  • 两个数据框的每个字母的个数怎么能一样呢?有 3 个“b”和 3 个“d”。

标签: r random split training-data stratifiedjs


【解决方案1】:

使用rsample 尝试这种方法,这与您想要的很接近。并且@AllanCameron的评论是完全有效的,你可以将三个分成两个1.5的每个样本:

library(rsample)
#Code
set.seed(123)
split_strat <- initial_split(df, prop = 0.5,
                             strata = 'Letters')
train_strat <- training(split_strat)
test_strat <- testing(split_strat)

检查比例:

table(train_strat$Letters)

a b c d 
2 2 3 2 

table(test_strat$Letters)

a b c d 
2 1 3 1 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 2022-06-25
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2020-06-08
    相关资源
    最近更新 更多