【问题标题】:How to keep all levels of categorical variables when splitting data frame in test and train set in R在 R 中拆分测试和训练集中的数据帧时如何保留所有级别的分类变量
【发布时间】:2014-11-14 14:37:24
【问题描述】:

有时将具有分类列的数据框拆分为测试集和训练集时,训练集不会包含分类变量的所有级别。然后,当您训练模型并尝试预测测试集时,预测将失败:

例如:

x <- data.frame(...) # data frame with columns with very dispersed categorical variables
set.seed(123)
smp_size <- floor(0.75 * nrow(x))
train_idx <- sample(seq_len(nrow(x)), size = smp_size)
train_set <- x[train_idx, ]
test_set <- x[-train_idx, ]
m <- lm(some_formula, data=train_set)
predict(m, newdata=test_set)

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :  
    factor xxxx has new levels yyy ...

有谁知道将训练集中和测试集中所有分类变量的水平设置为原始数据集中水平的便捷方法?

谢谢。

【问题讨论】:

    标签: r categorical-data


    【解决方案1】:

    插入符号函数 createDataPartition() 尝试处理您描述的问题。

    鉴于你上面的例子,你应该可以这样使用它:

    train_idx &lt;- createDataPartition(y, times = 1, p = 0.75, list=F)

    这里是函数 createDataPartition 的 R 文档的一部分: “当 y 是试图平衡分裂内的类分布的一个因素时,随机抽样是在 y 的水平内完成的。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-17
      • 2018-06-04
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2021-01-28
      • 2022-01-11
      • 2018-10-13
      相关资源
      最近更新 更多