如何统计partykit::cforest中各特征的节点拆分使用次数?
统计partykit::cforest模型中特征节点拆分次数的简便方法
要统计partykit::cforest模型里各特征用于节点拆分的次数,直接提取森林中每棵树的拆分变量并汇总即可,步骤如下:
1. 拟合cforest模型(示例)
library(partykit) data(iris) # 拟合分类随机森林 cf <- cforest(Species ~ ., data = iris, control = cforest_unbiased(mtry = 2))
2. 提取并统计拆分次数
# 遍历每棵树,提取所有非终端节点的拆分变量名 split_vars <- lapply(cf$ensemble, function(tree) { # 获取非终端节点的变量索引 var_ids <- tree$node[!tree$node$terminal, "split"]$varid # 映射为原始数据的变量名 names(iris)[var_ids] }) # 合并所有拆分变量并统计次数 split_counts <- table(unlist(split_vars)) # 输出结果 split_counts
3. 可选:统计相对拆分比例
如果需要查看各特征拆分次数的占比,可使用prop.table()转换:
prop.table(split_counts)
关键说明
cf$ensemble存储了cforest中的所有决策树,每个元素是一个party对象- 筛选
!tree$node$terminal是为了只统计用于拆分的非终端节点,排除叶子节点 - 这个方法统计的是实际被用于节点拆分的次数,和基于置换的变量重要性(
varimp(cf))逻辑不同
内容的提问来源于stack exchange,提问作者Markus Loecher
相关产品推荐
相关产品推荐

