✨ 欢迎关注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)
)
参考来源
https://github.com/shujuecn/boruta\_ridge\_plot,使用 Boruta 算法对临床数据进行特征选择,提取特征的重要性,并绘制基于 Boruta 结果的山脊图,展示不同特征的选择状态(确认、被拒绝、影子和待定)及其重要性分布,当然啦本公众号以python为主,R语言作为参考,
不忘初心接下来python实现,接下来使用到的python库是
用Python重新编码的原始R包,添加了一些额外的功能,当然也存在一定变化,但本质特征筛选功能不变
✨ python实现 ✨
Python实现的结果展示了基于Boruta算法的特征重要性分布图。图中使用箱线图(Boxplot)显示了不同特征在多次运行中的重要性排名,每个特征的排名由其位置决定。特征的颜色代表其选择状态
X 轴代表特征,Y 轴表示这些特征的重要性排名,排名越低表示该特征越重要。该图帮助直观地理解各个特征在模型中的重要性,并且通过颜色编码可以快速识别出哪些特征被认为是最重要的、哪些被排除,哪些则是暂定的
与 Python 实现的可视化不同,R 实现的山脊图显示了特征的分布情况,且通过不同颜色区分特征的选择状态(确认、被拒绝、影子和待定),颜色编码和决策类别的呈现方式略有不同
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到 淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系 ,购买作者的公众号合集。截至目前为止,合集已包含200多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。
作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤
。
购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信 deep_ML联系
避免淘宝客服漏掉信息
,希望能为您的学习之路提供帮助!
往期推荐
GeoShapley算法:基于地理数据的Shapley值在空间效应测量中的应用——位置重要性与特征交互作用分析
期刊配图:基于‘UpSet图’展示不同数据预处理对模型性能的影响
J Clean Prod:结合K-means聚类确定样本分组方式再结合shap初步解释模型的模拟实现
nature communications:结合LightGBM特征选择与RF模型的机器学习方法及SHAP解释
期刊配图:结合lightgbm回归模型与K折交叉验证的特征筛选可视化
Nature新算法:准确的小数据预测与表格基础模型TabPFN分类实现及其模型解释
Nature新算法:准确的小数据预测与表格基础模型TabPFN回归实现及其模型解释
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考