Для прогнозирования относительно набора данных удержания необходимо разбить исходные данные на кадры данных обучения и тестирования. Так как комментарии 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 <- glm(chd ~ age + alcohol + obesity + tobacco + typea + ldl,
data=trainSA,
family="binomial")
Когда мы делаем прогнозы для тестовых и обучающих фреймов данных, мы отмечаем, что длины выходных векторов соответствуют количеству строк в исходных фреймах данных.
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()
, но мы не видим его, потому что он не включает минимальный воспроизводимый пример .