基于随机森林的Boruta算法在Python与R中的实现及其可视化应用

机器学习算法大数据

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍:基于

随机森林的Boruta算法

进行相关复现,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。

详细数据和代码将在稍后上传至交流群,付费群成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。

购买前请咨询,避免不必要的问题。

✨ R语言实现 ✨


          
# 导入所需的库
          
library(tidyverse)  # 数据处理与可视化
          
library(Boruta)     # 特征选择
          
library(ggridges)   # 绘制山脊图
          
library(viridis)    # 色彩调色板
          
library(scales)     # 透明度设置
          

          
# 设置随机种子,确保结果可复现
          
set.seed(250307)
          

          
# 定义函数 simulate_clinical_data
          
simulate_clinical_data <- function(
          
  num_patients = 5000,    # 总患者数量,默认为5000
          
  num_biomarkers = 30,    # 生物标志物数量,默认为30
          
  effect_increment = 0.02 # 影响递增值
          
) {
          
  # 生成临床结局标签
          
  outcome_labels <- sample(c(rep(1, floor(num_patients / 2)), rep(0, num_patients %% 2)))
          

          
  # 初始化生物标志物矩阵
          
  biomarker_data <- matrix(
          
    nrow = num_patients, 
          
    ncol = num_biomarkers
          
  )
          

          
  # 生成生物标志物数据
          
  for (marker_idx in 1:num_biomarkers) {
          
    effect_size <- marker_idx * effect_increment
          
    biomarker_data[, marker_idx] <- rnorm(
          
      n = num_patients, 
          
      mean = outcome_labels * effect_size,
          
      sd = 1
          
    )
          
  }
          

          
  # 转换为数据框
          
  clinical_data <- as.data.frame(biomarker_data)
          
  colnames(clinical_data) <- sprintf("Biomarker_%02d", 1:num_biomarkers)
          
  clinical_data$outcome <- factor(outcome_labels)
          

          
  return(clinical_data)
          
}
          

          
# 生成验证数据集
          
clinical_dataset <- simulate_clinical_data(num_patients = 500, num_biomarkers = 30)
          

          
# 使用 Boruta 算法进行特征选择
          
boruta_selection <- Boruta(outcome ~ ., data = clinical_dataset, pValue = 0.01, mcAdj = TRUE, maxRuns = 50, doTrace = 3, holdHistory = TRUE, getImp = getImpRfZ)
          
print(boruta_selection)
          

          
# 提取特征重要性的历史记录
          
imp_history <- as.data.frame(boruta_selection$ImpHistory)
          

          
# 区分真实特征与 shadow 特征
          
shadow_cols <- grep("shadow", colnames(imp_history), value = TRUE)
          
real_cols <- setdiff(colnames(imp_history), shadow_cols)
          

          
# 构造真实特征决策数据框
          
final_decision <- tibble(
          
  feature = real_cols, 
          
  decision = boruta_selection$finalDecision[real_cols]
          
)
          

          
# 创建影子特征决策数据框
          
shadow_decision <- tibble(
          
  feature = shadow_cols, 
          
  decision = rep("Shadow", length(shadow_cols))
          
)
          

          
# 合并所有特征的决策信息
          
decision_all <- bind_rows(final_decision, shadow_decision)
          

          
# 将 imp_history 转换为长格式,并合并决策信息
          
imp_history_long <- imp_history %>%
          
  pivot_longer(cols = everything(), names_to = "feature", values_to = "importance") %>%
          
  left_join(decision_all, by = "feature") %>%
          
  filter(is.finite(importance)) # 过滤掉非有限值
          

          
# 根据每个特征的中位数重要性进行排序,确定 y 轴的因子顺序
          
feature_order <- imp_history_long %>%
          
  group_by(feature) %>%
          
  summarise(median_imp = median(importance, na.rm = TRUE)) %>%
          
  arrange(median_imp) %>%
          
  pull(feature)
          

          
# 绘制基于 Boruta 结果的特征重要性山脊图(Ridge Plot)
          
ggplot(imp_history_long, aes(x = importance, y = fct_relevel(feature, feature_order), fill = decision)) +
          
  geom_density_ridges_gradient(
          
    scale = 3, 
          
    rel_min_height = 0.01, 
          
    color = "black"
          
  ) +
          
  scale_fill_manual(
          
    values = c(
          
      "Confirmed" = alpha("#02BBC1", 0.6), 
          
      "Tentative" = alpha("#FFC107", 0.6), 
          
      "Rejected" = alpha("#E53935", 0.6), 
          
      "Shadow" = alpha("#757575", 0.6)
          
    )
          
  ) +
          
  labs(
          
    title = "Feature Importance Ridge Plot Based on Boruta", 
          
    x = "Importance (Z-Score)", 
          
    y = "Features"
          
  ) +
          
  theme_bw() +
          
  theme(
          
    legend.position = "right", 
          
    panel.spacing = unit(0.1, "lines"), 
          
    axis.text.y = element_text(size = 10)
          
  )
      

picture.image

参考来源

https://github.com/shujuecn/boruta\_ridge\_plot,使用 Boruta 算法对临床数据进行特征选择,提取特征的重要性,并绘制基于 Boruta 结果的山脊图,展示不同特征的选择状态(确认、被拒绝、影子和待定)及其重要性分布,当然啦本公众号以python为主,R语言作为参考,

不忘初心接下来python实现,接下来使用到的python库是

用Python重新编码的原始R包,添加了一些额外的功能,当然也存在一定变化,但本质特征筛选功能不变

✨ python实现 ✨

picture.image

Python实现的结果展示了基于Boruta算法的特征重要性分布图。图中使用箱线图(Boxplot)显示了不同特征在多次运行中的重要性排名,每个特征的排名由其位置决定。特征的颜色代表其选择状态

X 轴代表特征,Y 轴表示这些特征的重要性排名,排名越低表示该特征越重要。该图帮助直观地理解各个特征在模型中的重要性,并且通过颜色编码可以快速识别出哪些特征被认为是最重要的、哪些被排除,哪些则是暂定的

与 Python 实现的可视化不同,R 实现的山脊图显示了特征的分布情况,且通过不同颜色区分特征的选择状态(确认、被拒绝、影子和待定),颜色编码和决策类别的呈现方式略有不同

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 购买介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到 淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系 ,购买作者的公众号合集。截至目前为止,合集已包含200多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。

更新的内容包含数据、代码、注释和参考资料。

作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤

购买前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信 deep_ML联系

避免淘宝客服漏掉信息

,希望能为您的学习之路提供帮助!

往期推荐

GeoShapley算法:基于地理数据的Shapley值在空间效应测量中的应用——位置重要性与特征交互作用分析

期刊配图:基于‘UpSet图’展示不同数据预处理对模型性能的影响

期刊配图:结合残差分析的模型预测性能可视化

J Clean Prod:结合K-means聚类确定样本分组方式再结合shap初步解释模型的模拟实现

文献配图:如何通过雷达图全面评估机器学习模型的预测性能

nature communications:结合LightGBM特征选择与RF模型的机器学习方法及SHAP解释

期刊配图:SHAP特征重要性与相关系数的联合可视化

期刊配图:结合lightgbm回归模型与K折交叉验证的特征筛选可视化

Nature新算法:准确的小数据预测与表格基础模型TabPFN分类实现及其模型解释

Nature新算法:准确的小数据预测与表格基础模型TabPFN回归实现及其模型解释

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
大规模高性能计算集群优化实践
随着机器学习的发展,数据量和训练模型都有越来越大的趋势,这对基础设施有了更高的要求,包括硬件、网络架构等。本次分享主要介绍火山引擎支撑大规模高性能计算集群的架构和优化实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论