library(RSSL)set.seed(1)df <- generateSlicedCookie(1000,expected=FALSE) %>% add_missinglabels_mar(Class~.,0.98)df_test <- generateSlicedCookie(1000,expected=FALSE)class_lr <- LogisticRegression(Class~.,df,lambda = 0.01)class_lr_self <- SelfLearning(Class~., df, method=LogisticRegression)
这里,class_lr
是一个逻辑回归模型。为了获取它的预测概率,我可以调用(感谢这个帖子的回答):
log(posterior(class_lr, df_test))
第二个模型,class_lr_self
是一个带有自学习包装器的逻辑回归模型。有没有办法输出class_lr_self
的预测概率?
运行predict(class_lr_self, newdata = df_test)
只会给我标签。
我尝试了以下方法,但对于SelfLearning
没有posterior
方法,而LogisticRegression
有。
> log(posterior(class_lr_self, df_test))Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘posterior’ for signature ‘"SelfLearning"’
回答:
如果查看这里,这个类没有相应的方法:
setMethod("predict", signature(object="SelfLearning"), function(object,newdata,...) { ModelVariables <- PreProcessingPredict(object@modelform,newdata,y=NULL,scaling=object@scaling,intercept=FALSE,classnames=object@classnames) X<-ModelVariables$X return(predict(object@model,X,...))
}
我们只需要一个新的函数来返回后验概率:
func = function(object,newdata,...) { ModelVariables <- PreProcessingPredict(object@modelform,newdata,y=NULL,scaling=object@scaling,intercept=FALSE,classnames=object@classnames) X<-ModelVariables$X return(posterior(object@model,X,...))}
然后你可以这样做:
log(func(class_lr_self, df_test))
或者你可以为此设置一个后验概率方法:
setMethod("posterior", signature(object="SelfLearning"), function(object,newdata,...) { ModelVariables <- PreProcessingPredict(object@modelform,newdata,y=NULL,scaling=object@scaling,intercept=FALSE,classnames=object@classnames) X<-ModelVariables$X return(posterior(object@model,X,...))})log(posterior(class_lr_self, df_test))