用于整个数据集而不只是训练数据集的逻辑回归的预测函数

问题描述 投票:0回答:1

我的问题是,我的逻辑回归模型的预测函数正在返回整个数据集的预测,而不仅仅是返回测试数据。我的测试数据中有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+行。

r glm predict
1个回答
0
投票

为了根据保留数据集进行预测,应该将初始数据分为训练和测试数据帧。由于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)

此时,我们可以看到trainSAtestSA中的行数不同。

> 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

© www.soinside.com 2019 - 2024. All rights reserved.