R语言计算特征Shapley Value时explain函数报错求助
Shapley Value计算R代码报错解决方案
错误原因
Error in UseMethod("explain") : no applicable method for 'explain' applied to an object of class "c('matrix', 'double', 'numeric')"
该报错的核心触发点是shapr包的explain()函数仅支持输入data.frame格式的测试集,你代码中通过as.matrix()将x_test转换为了矩阵格式,函数无法匹配到对应处理方法。
修复方案
- 删除
x_train、x_test的as.matrix()强制转换逻辑,shapr包的相关函数原生支持data.frame格式输入 - 若你因其他逻辑必须将特征集转换为矩阵,在传入
explain()函数前用as.data.frame()将x_test转回data.frame格式即可
修正后可运行核心代码
data("Boston", package = "MASS") dt<-cbind(Boston$lstat,Boston$rm,Boston$dis,Boston$indus) Var1<-Boston[,sample(ncol(dt), size = 1), drop = FALSE] Var2<-Boston[,sample(ncol(dt), size = 1), drop = FALSE] Var3<-Boston$medv modt<-cbind(Var1,Var2,Var3) varmod<-lm(Var3~.,data=modt) summary(varmod) x_var<-c(colnames(modt[1]),colnames(modt[2])) y_var<-"Var3" # 取消as.matrix转换,直接保留data.frame格式 x_train <- modt[-1:-6, x_var] y_train <- modt[-1:-6, y_var] x_test <- modt[1:6, x_var] y_test <- modt[1:6, y_var] explainer <- shapr(x_train,varmod ) p <- mean(y_train) explan<-explain( x_test, explainer=explainer, approach="empirical", prediction_zero=p )
可选优化
你当前的随机采样逻辑可能出现两次采样选中同一列的问题,可简化为单次采样2个不重复列,代码更简洁:
# 随机选取2个不重复的特征列 sel_cols <- sample(ncol(dt), size = 2, replace = FALSE) modt <- cbind(dt[,sel_cols], Var3 = Boston$medv) varmod <- lm(Var3~., data = modt)
内容的提问来源于stack exchange,提问作者Harsh
相关产品推荐
相关产品推荐

