2

问题

我在 R 中训练了一个线性回归来预测数据框中的this.target变量。该训练是在由 指定的数据子集上完成的。citydatatrain.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

我的分析

data$city是 4 个级别的因子,但似乎 R 将其读取为“无效类型 (NULL)”,即使此变量中的观察结果都不是 NULL。

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

4

2 回答 2

4

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

事实证明,这个子集允许模型拟合正常进行,但它导致模型预测因上述错误和警告而犹豫不决。通过从我的公式定义中删除子集,模型拟合和预测都没有问题。

于 2013-11-05T18:29:13.423 回答
-1

此解决方案适用于此错误,但不适用于主要问题,因为它难以理解。

解决方案是制作一个变量让我们说xx=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,而不是矩阵或数组

会出现。

于 2017-11-18T08:09:08.163 回答