我正在尝试使用石灰在软件包的输出中添加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”分配方法