问题
我在R中训练了一个线性回归来预测this.target
city
,数据框data
中的变量。此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
我的分析
data$city
是4级的因子,但似乎R将其读作“无效类型(NULL)”,即使此变量中的所有观察都不为NULL。
此外,似乎R正确读取行但不读取训练集的列。 dim(data[test.index, ])
生成一个22313和12的向量。
答案 0 :(得分:4)
感谢joran的评论,我能够找到解决问题的方法。乔兰指出,公式不应包括子集操作。
事实证明,这种子集允许模型拟合正常进行,但它导致模型预测与上述错误和警告一致。通过从我的公式定义中删除子集,模型拟合和预测都没有问题。
答案 1 :(得分:-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,而不是矩阵 或数组
会出现。