首页 文章

R中的predict和glm.predict出错

提问于
浏览
2

The Problem

我在R中训练了一个线性回归来预测数据框 data 中的变量 city . 此trainig是在数据子集上完成的,由 train.index 指定 .

model = glm('data[, this.target] ~ data$city', data = data, subset = train.index)

我试图在保持数据上测试这个模型,该数据由 test.index 指定 .

predictions = predict(model, data[test.index, ])

无论出于何种原因,第二步都会产生错误和警告 .

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev =
object$xlevels) : invalid type (NULL) for variable 'data$city' In addition:
Warning message: 'newdata' had 22313 rows but variables found have 0 rows

My Analysis

data$city 是4级的因子,但似乎R将其读作"invalid type (NULL)",即使此变量中的所有观察都不是NULL .

此外,似乎R正确读取行但不读取训练集的列 . dim(data[test.index, ]) 产生一个22313和12的向量 .

2 回答

  • 4

    感谢joran的评论,我能够找到解决问题的方法 . 乔兰指出,公式不应包括子集操作 .

    事实证明,这种子集化允许模型拟合正常进行,但它导致模型预测与上述错误和警告一致 . 通过从我的公式定义中删除子集,模型拟合和预测都没有问题 .

  • -1

    此解决方案适用于此错误,但不适用于主要问题,因为很难遵循 .

    解决方案是制作变量让我们说 x ; x=as.data.frame(testset) 并将其传递给预测为

    classifier = glm(formula = Survived ~ .,
                     family = binomial,
                     data = training_set)
    x = as.data.frame(test_set)
    prob_pred = predict(classifier, type = 'response', newdata =x)
    y_pred = ifelse(prob_pred > 0.5, 1, 0)
    

    预测测试集结果

    在glm或rpart(基于决策树的分类库)中,测试集应该是数据框,有时预处理步骤会改变您的数据类型(您想要预测的数据)应该是数据框,如果不是,错误

    model.frame.default中的错误(条款,newdata,na.action = na.action,xlev = object $ xlevels):'data'必须是data.frame,而不是矩阵或数组

    会出现 .

相关问题