Глядя на исходный код LogisticRegression , для предиката он вычисляет прогноз в соотношении log-odds, преобразует его в вероятности и возвращает только класс, поэтому для type="response"
опция отсутствует:
setMethod("predict", signature(object="LogisticRegression"), function(object, newdata) {
ModelVariables<-PreProcessingPredict(object@modelform,newdata,scaling=object@scaling,intercept=object@intercept)
X<-ModelVariables$X
w <- matrix(object@w, nrow=ncol(X))
expscore <- exp(cbind(rep(0,nrow(X)), X %*% w))
probabilities <- expscore/rowSums(expscore)
# If we need to return classes
classes <- factor(apply(probabilities,1,which.max),levels=1:length(object@classnames), labels=object@classnames)
return(classes)
})
Другим методом, связанным с этим классом, является posterior
, и вы можете видеть, что код очень похож, и он возвращает вероятности в форме exp:
setMethod("posterior", signature(object="LogisticRegression"), function(object,newdata) {
ModelVariables<-PreProcessingPredict(modelform=object@modelform,
newdata=newdata,
y=NULL,
scaling=object@scaling,
intercept=object@intercept)
X<-ModelVariables$X
w <- matrix(object@w, nrow=ncol(X))
expscore <- exp(cbind(rep(0,nrow(X)), X %*% w))
posteriors <- expscore/rowSums(expscore)
posteriors <- exp(posteriors)
colnames(posteriors) <- object@classnames
return(posteriors)
})
Извинения за Немного длинный ответ, если вам нужны вероятности, вы можете сделать:
probs = log(posterior(class_lr,df_test))
Первый столбец - это вероятность быть в первом классе, и так далее для второго столбца. Чтобы убедиться, что метки похожи:
pred_labels = predict(class_lr,df_test)
table(apply(probs,1,which.max) == as.numeric(pred_labels))
TRUE
1000