我正在尝试使用石灰在我正在开发的包的输出中添加 ML 解释。我的解决方案使用库 gbm 中的梯度提升模型。石灰不支持这种类型的模型,所以我需要向泛型添加一个 gbm 方法:-model_type -predict_model
如果我手动执行此操作,逐行运行我的代码,我没有问题。
但是,一旦将石灰包含在函数中并且我尝试运行它,该函数似乎无法分配“gbm”方法。.
有人知道如何解决这个问题吗?
我也尝试过使用 setMethod,但随后我会收到一条消息说环境已锁定
我在包函数之外训练我的模型:
lime_model<-gbm(train_target ~. ,
data = train,
distribution="bernoulli",
n.trees = N_trees,
interaction.depth = Int.depth,
shrinkage=Learn_rate,
n.minobsinnode=Min.obs.node)
然后将其传递给函数:
explanation<-
lime_gbm(train_data=train,test_data=test,model=lime_model,Conf,
n_trees=N_trees)
定义为:
#' @param train_data a dataframe containing the data to train the model on
#' @param test_data a dataframe containing the data to test test the model on
#' @param Conf a config file to extract general variable names
#' @param n_trees number of trees in the model
#' @param model the model to be explained
#'
#' @import dplyr
#' @import lime
#'
#' @return list
#' @export
lime_gbm<-function(train_data,test_data,model,Conf, n_trees){
if(!is.data.frame(train_data) | !is.data.frame(test_data)){
stop("data must be a data.frame")
}
if(!is.numeric(n_trees)){
stop("model parameters must be numeric")
}
if(!class(model)=="gbm"){
stop("model must be of class gbm")
}
fit.gbm=model
#create model type for gbm
model_type.gbm <- function(x,...){
return("classification")
}
#setMethod("model_type","gbm",function(x,...) "classification")
predict_model.gbm <- function(x, newdata, type="prob",...) {
res <- predict.gbm(x,newdata = newdata, type="response",
n.trees=n_trees)
res <-as.data.frame(res)
colnames(res)<-"predictions"#c("Yes","No")
return(res)
}
#setMethod("predict_model","gbm",function(x,...) as.data.frame(x))
explainer <- lime::lime(train_data,
fit.gbm,
bin_continous=T,
quantile_bins=F)
explanation <- lime::explain(test_data,
explainer,
n.trees=n_trees,
n_labels=1,
#model_type="classification",
n_features=ncol(test_data),
n_permutations = 10,#500,
feature_select='lasso_path',
dist_fun="manhattan")
return(explanation)
}
代码原样给出错误消息:“错误:模型类必须有一个 model_type 方法。请参阅 ?model_type 以获得开箱即用支持的模型的概述”
或者,如果我在分配方法时删除“.gbm”并删除前面的#
#setMethod()
:
setMethod("model_type", "gbm", function(x, ...) "classification") 中的错误:环境 'SiteViewModelling' 被锁定;无法为函数“model_type”分配方法</p>