【问题标题】:How to subset a dataset such that the test set contains如何对数据集进行子集化,以使测试集包含
【发布时间】:2014-06-27 23:15:14
【问题描述】:

我构建了一个线性回归模型 (lm.full),并尝试在测试数据集上测试该模型。当我尝试根据测试数据进行预测时,由于具有许多唯一值的功能/预测器而遇到问题。麻烦的特性是 cbsa(基于核心的统计区域)。

train 和 test 具有相同的唯一值。我不确定问题是什么,因为如果因子变量的每个级别都适合训练模型,那么我认为我应该能够预测值测试。

我这里将数据划分为测试集和训练集:

sample.size<-floor(0.95*nrow(tvwm))
# Make sure that seeds different
set.seed(15)
tvwm_train_ind <- sample(seq_len(nrow(tvwm)), size = sample.size)
tvwm_train <- tvwm[tvwm_train_ind,]
tvwm_test <- tvwm[-tvwm_train_ind,]

这是预测:

> predict(object=lm.full, newdata=tvwm_test, type = "response")

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  factor factor(cbsa_name) has new levels Boston-Cambridge-Newton, MA-NH, Detroit-Warren-Livonia, MI, Virginia Beach-Norfolk-Newport News, VA-NC

【问题讨论】:

    标签: r


    【解决方案1】:

    试试

    all(levels(tvwm_test$cbsa_name) %in% levels(tvwm_train$cbsa_name)) 
    all(levels(tvwm_train$cbsa_name) %in% levels(tvwm_test$cbsa_name))
    

    并确保它们都是 TRUE。或者,正如 Gregor 在他的评论中建议的那样,您可以在一个声明中做到这一点:

    identical(levels(tvwm_test$cbsa_name), levels(tvwm_train$cbsa_name))
    

    如果它们都不是 TRUE,并且您确定训练集和测试集在数据中具有相同的因子水平,则运行以下命令来重置水平:

    tvwm_train$cbsa_name <- factor(tvwm_train$cbsa_name)
    tvwm_test$cbsa_name <- factor(tvwm_test$cbsa_name) 
    

    【讨论】:

    • 我认为您在前几行中缺少一些括号。除了两个语句,您还可以使用indentical(levels(tvwm_test$cbsa_name), levels(tvwm_train$cbsa_name))
    • 谢谢,修正了错误!很好的建议。
    • '> 相同(x=levels(tvwm_test), y = levels(tvwm_train)) [1] TRUE'
    • 是否所有因子水平在两组中都有有效观察值?
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 2023-03-15
    • 1970-01-01
    • 2023-03-22
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多