我在R中使用R自带的Auto
数据集进行逻辑回归实验。
我已经将数据集分为训练部分(80%)和测试部分(20%),并分别对每个部分进行了归一化处理。
我可以无障碍地创建模型,使用以下代码行:
mlr<-glm(mpg ~ displacement + horsepower + weight, data =train)
我甚至可以用训练集预测train$mpg
:
trainpred<-predict(mlr,train,type="response")
并通过此计算样本内误差:
etab <- table(trainpred, train[,1])insampleerror<-sum(diag(etab))/sum(etab)
问题出现在我想用测试集进行预测时。我使用了以下代码行:
testpred<-predict(model_rl,test,type="response")
这会给我以下警告:
‘newdata’有79行,但找到的变量有313行
但这不起作用,因为testpred
的长度与trainpred
相同(应该更少)。当我想用testpred
计算测试误差时,使用以下代码行:
etabtest <- table(testpred, test[,1])
我得到了以下错误:
在table(testpred, test[, 1])中出错:
所有参数必须具有相同的长度
我做错了什么?
回答:
如果有人遇到相同的问题,我来回答我自己的问题:
当我在glm
中设置参数时,我是在指定我想预测的内容,即使用train
数据预测Auto$mpg标签,因此,我的glm
调用必须是:
attach(Auto)mlr<-glm(mpg ~ displacement + horsepower + weight, data=Auto, subset=indexes_train)
现在,如果我调用predict
、table
等,就不会有结构大小的问题。修正这个错误后,我的代码就可以正常工作了。