我有一个数据集,我按以下方式分为训练和测试子集:
train_ind <- sample(seq_len(nrow(dataset)), size=(2/3)*nrow(dataset))
train <- dataset[train_ind]
test <- dataset[-train_ind]
然后,我用它训练一个glm:
glm.res <- glm(response ~ ., data=dataset, subset=train_ind, family = binomial(link=logit))
最后,我用它来预测我的测试集:
preds <- predict(glm.res, test, type="response")
根据示例,这会失败并显示错误:
model.frame.default中的错误(Terms,newdata,na.action = na.action,xlev = object $ xlevels):factor有新的级别
请注意,该值显示在完整数据集中,但显然不在训练集上 . 我想做的是让预测函数忽略这些新因素 . 即使它已经对因子进行了二值化,我也不明白为什么它可以假设新值(因此,不是线性模型中的变量)只是0,这将产生正确的行为 .
有没有办法做到这一点?
1 回答
我从以下数据生成过程开始(二元响应变量,一个数值自变量和3个分类独立变量):
在这里,我构建了训练和测试集,以便在测试集中具有一些分类协变量(
x2
和x3
),其中包含的类别多于训练集中的类别:当然,
predict
会产生@ Setzer22上面描述的消息错误:这是一种(不优雅)删除
train
行的方法,这些行在协变量中有新的级别:在测试集
x2
和x3
的子集subset.test
中没有新类别:现在
predict
运作良好:希望这可以帮到你 .