我的问题是,我的逻辑回归模型的预测函数正在返回整个数据集的预测,而不仅仅是返回测试数据。我的测试数据中有6,931行。这是我的模型:
test_model <- glm(status2~grade + verified + term + income + revolRatio +totalAcc + totalRevLim + accOpen24 ,data=Loan_test,family="binomial")
这是我的预测函数:
probabilities <- predict(test_model,newdata=Loan_test, type="response")
感谢您对我做错任何事情的帮助。
确定,这是我使用约27000行的训练数据集将其更改为的内容:
test_model <- glm(status2~grade + verified + term + income + revolRatio +totalAcc + totalRevLim + accOpen24 ,data=Loan_training,family="binomial")
probabilities <- predict(test_model,newdata=Loan_test, type="response")
但是概率仍然包含34000+行。
为了根据保留数据集进行预测,应该将初始数据分为训练和测试数据帧。由于OP注释指出存在单独的训练和测试数据框架,因此我们将仅使用训练数据框架来构建模型,并根据测试数据框架进行预测。
# use training data for model
test_model <- glm(status2~grade + verified + term + income + revolRatio +totalAcc + totalRevLim + accOpen24 ,
data=Loan_training,family="binomial")
#make predictions using hold out data (test)
probabilities <- predict(test_model,newdata=Loan_test, type="response")
[这是一个完整的工作示例,使用来自ElemStatLearn
软件包的南非心脏病数据显示了当我们将数据框分为测试和训练,将二项式模型拟合为glm()
并通过测试和训练进行预测时数据帧,预测的数量等于predict()
中使用的数据帧的大小。
library(ElemStatLearn)
data(SAheart)
set.seed(801248)
train = sample(1:dim(SAheart)[1],size=dim(SAheart)[1]*.6,replace=F)
trainSA = SAheart[train,]
nrow(trainSA)
testSA = SAheart[-train,]
nrow(testSA)
此时,我们可以看到trainSA
和testSA
中的行数不同。
> nrow(trainSA)
[1] 277
> testSA = SAheart[-train,]
> nrow(testSA)
[1] 185
>
接下来,我们用glm()
拟合二项式一般线性模型。
modFit
当我们同时对测试和训练数据帧进行预测时,我们注意到输出向量的长度与原始数据帧中的行数匹配。
predicted_test <- predict(modFit,testSA)
length(predicted_test)
predicted_train <- predict(modFit,trainSA)
length(predicted_train)
...和输出:
> length(predicted_test)
[1] 185
> predicted_train <- predict(modFit,trainSA)
> length(predicted_train)
[1] 277
最后,我们通过计算每个数据帧的误分类率来证明predict()
结果的差异。
missClass = function(values,prediction){sum(((prediction > 0.5)*1) != values)/length(values)}
# Classification errors on TrainSA
missClass(trainSA$chd,predicted_train)
# Classification Errors on TestSA
missClass(testSA$chd,predicted_test)
...和输出:
> missClass(trainSA$chd,predicted_train)
[1] 0.2924188
> # Classification Errors on TestSA
> missClass(testSA$chd,predicted_test)
[1] 0.2594595
>
结论:输入predict()
时,原始帖子中的代码以某种方式引用了原始数据帧,但是我们看不到它,因为它不包含minimal reproducible example。