You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DALEX::model_profile()指定variable_splits参数?

解决DALEX中model_profile()的variable_splits参数设置问题

问题说明

使用DALEX包的model_profile()函数计算随机森林模型的累积局部效应(ALE)时,收到警告:某变量唯一值超过201个,将使用全部值进行拆分,建议通过variable_splits参数手动修改此行为。尝试调用ingredients::calculate_variable_split生成拆分规则时,发现该函数并非ingredients包的导出对象,无法直接调用。

正确设置方法

variable_splits参数需要传入一个列表,列表中每个元素对应一个变量的拆分规则,结构需包含拆分点(cut_points)和变量名(name)。可通过两种方式构造:

方式1:调用ingredients内部函数生成拆分规则

calculate_variable_split是ingredients包的内部未导出函数,可通过三个冒号(:::)调用,指定拆分点数:

# 为toomany变量生成20个拆分点
split_toomany <- ingredients:::calculate_variable_split(data$toomany, n = 20)
# 构造variable_splits列表,键为目标变量名
variable_splits_list <- list(toomany = split_toomany)

方式2:手动构造拆分规则

直接通过分位数或自定义区间生成拆分点,手动组装符合要求的结构:

# 对toomany变量按20个分位数生成拆分点
cut_points <- quantile(data$toomany, seq(0, 1, length.out = 21))
# 构造拆分规则列表
variable_splits_list <- list(
  toomany = list(
    cut_points = cut_points,
    name = "toomany"
  )
)

完整示例代码

将构造好的拆分列表传入model_profile()即可消除警告:

library(tidyverse)
library(ranger)
library(DALEX)
data("iris")
glimpse(iris)

data<-rbind(iris,iris)%>%# 翻倍数据使观测数超过201
  mutate(Species=as.factor(ifelse(Species=="setosa",1,0)))%>%# 将Species转为二分类因子
  mutate(toomany=sample(1:1000,300,replace=FALSE))# 生成唯一值超过201的变量

mod<-ranger(Species~.,data,keep.inbag =TRUE,importance='impurity',seed=4,probability=TRUE)# 训练随机森林概率模型

ex<-DALEX::explain(model=mod,
                   data=data[,-5],
                   y=as.numeric(as.character(data$Species)),
                   label="Random Forest")# 创建解释器对象

# 方式1:使用ingredients内部函数生成拆分规则
split_toomany <- ingredients:::calculate_variable_split(data$toomany, n = 20)
variable_splits_list <- list(toomany = split_toomany)

# 或者方式2:手动构造拆分规则
# cut_points <- quantile(data$toomany, seq(0, 1, length.out = 21))
# variable_splits_list <- list(
#   toomany = list(
#     cut_points = cut_points,
#     name = "toomany"
#   )
# )

# 传入variable_splits参数计算ALE,无警告
ale<-model_profile(explainer=ex,type="accumulated",variable_splits=variable_splits_list)

补充说明

  • 若需为多个变量设置拆分规则,只需在variable_splits_list中添加对应变量的拆分元素即可,格式与单个变量一致。
  • 拆分点数n可按需调整,通常建议设置为20-50之间,平衡计算效率与结果精度。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:45:26