[英]R: how to output prediction probabilities with classification models
当我使用glm
拟合逻辑回归模型时,我可以指定type = "response"
以获得预测概率。
model <- glm(formula= vs ~ wt + disp, data=mtcars, family=binomial)
newdata = data.frame(wt = 2.1, disp = 180)
predict(model, newdata, type="response")
1
0.2361081
我正在一个新包RSSL
试验逻辑回归函数。 下面是一些示例代码(来自文档)
library(RSSL)
set.seed(1)
df <- generateSlicedCookie(1000,expected=FALSE) %>%
add_missinglabels_mar(Class~.,0.98)
class_lr <- LogisticRegression(Class~.,df,lambda = 0.01)
df_test <- generateSlicedCookie(1000,expected=FALSE)
predict(class_lr,df_test)
在class_lr
对象上使用predict
为我提供了类标签。 并且使用predict(class_lr,df_test, type = "response")
导致错误。 有没有办法让 R 输出预测的概率?
查看LogisticRegression的源代码,对于 predict,它计算对数优势比的预测并将其转换为概率并仅返回类,因此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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.