随机森林+SHAP:如何制作好看的SHAP分析图—分组绘制

RF+SHAP分析是一种可解释分析的机器学习技术,可以量化特征重要性等,但是原始的SHAP分析图容易出现较为杂乱,信息单一的情况,下面分享一下我常用的SHAP分析图的绘制代码:

最终绘图结果展示:

废话不多说,直接上代码:

模型运行前数据准备部分:

### 选择自己使用的数据,行为样本,列为特征
merged_data = data

# 选择特征和目标标签
# 部分特征
initial_features = ['Year', 'Athletes_Num', 'F', 'M', 'Gold_Ratio', 'Silver_Ratio', 'Bronze_Ratio', 'is_host', 'Participated_Projects', 'Total_Projects']
# 数据中18列及以后的特征
additional_features = merged_data.columns[17:].tolist()  
# 这里可以直接对features进行命名,如 features = ['year','Age','Gender']替换成自己的即可
features = initial_features + additional_features

X = merged_data[features]

# 处理缺失值,均值填充
imputer = SimpleImputer(strategy='mean')
X = pd.DataFrame(imputer.fit_transform(X), columns=X.columns)

# 选择标签
targets = ['Gold','Total'] # 这里也可以选择单个特征作为标签如 targets = ['Gold']

# 定义空模型
models = {}
shap_values_list &
### 随机森林模型参数灵敏度分析 #### 使用单参数分析评估随机森林模型的敏感性 通过调整单一输入参数来观察其对模型输出的影响,可以有效识别哪些特征对于模型预测最为重要。这种方法有助于理解各个因素如何单独影响最终的结果[^1]。 ```r library(randomForest) set.seed(12345678) # 基础模型构建 rf_base <- randomForest(class ~ ., data = data.train) # 对特定变量执行单参数变动实验 for (var in names(data.train)) { if (!is.numeric(data.train[[var]])) next modified_data <- data.train modified_data[[var]] <- mean(modified_data[[var]], na.rm=TRUE) # 将选定列替换为其均值 rf_modified <- randomForest(class ~ ., data = modified_data) cat("Variable:", var, "\n") print(confusionMatrix(predict(rf_modified, type="class"), data.test$class)) } ``` 此代码片段展示了如何遍历数据集中每一个数值型属性,并将其设置为平均值后重新训练模型,以此衡量该属性的重要性变化情况。 #### 利用ML可解释性技术深入探究随机森林内部机制 除了传统的统计测试外,还可以借助专门设计用来解析复杂机器学习算法的技术手段来进行更细致入微的研究工作。这些工具能够揭示隐藏于黑箱背后的逻辑关系,使得研究人员不仅知其然而且知所以然[^2]。 - **Permutation Importance**: 扰乱某个特征的数据分布再计算新旧表现差异; - **Partial Dependence Plots(PDP)**: 展示目标响应随给定自变量连续改变的趋势曲线图; - **Individual Conditional Expectation(ICE) Curves**: 类似PDP但针对个体样本绘制轨迹线; 上述三种方式均可帮助定位到那些真正驱动着分类器决策的关键要素上。 #### 实施具体操作指南 为了实现全面而系统的灵敏度检验流程,在实际应用当中建议采取如下措施: - 安装必要的Python库如`eli5`, `shap`, 或者R中的`DALEX`等支持高级可视化功能的软件包。 - 应用之前提到过的几种主要方法论框架之一或组合起来综合考量多方面视角下的结论。 - 记录每次试验所得出的各项指标得分及其对应的配置选项以便后续对比分析之需。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值