如何对测试集包含的数据集进行子集化

时间:2014-06-27 23:15:15

标签: r

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

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

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

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

1 个答案:

答案 0 :(得分:2)

尝试

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

并确保它们都是正确的。或者,正如格雷戈尔在评论中提到的那样,你可以在一个声明中做到:

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)