首页
/ ggRandomForests包:探索随机森林回归分析与可视化

ggRandomForests包:探索随机森林回归分析与可视化

2025-06-27 10:48:28作者:伍希望

摘要

随机森林(Random Forests)是由Breiman提出的一种非参数统计方法,它不需要对协变量与响应变量之间的关系做任何分布假设。作为一种强大且非线性的技术,随机森林通过构建多棵决策树并集成其结果来优化预测准确性。randomForestSRC包提供了对生存分析、回归和分类问题的统一随机森林实现方案。

虽然随机森林具有出色的预测准确性,但模型的复杂性和可解释性问题限制了其更广泛的应用。ggRandomForests包正是为解决这一问题而设计,它能够从randomForestSRC对象中提取中间数据,并利用ggplot2绘图系统生成可视化图形,帮助用户直观理解随机森林模型的构建过程。

本教程将系统介绍如何使用randomForestSRC包构建回归随机森林模型,并利用ggRandomForests包深入分析模型结构。我们将以经典的波士顿房价数据集为例,展示变量重要性(VIMP)和最小深度(Minimal Depth)等特征选择方法,以及变量依赖图和条件依赖图等可视化技术,全面展示随机森林在回归问题中的预测能力和信息提取优势。

文档概述

本文档是ggRandomForests包的教程式说明文档,重点介绍如何结合randomForestSRC和ggplot2包来构建和可视化回归随机森林模型。ggRandomForests的主要优势包括:

  1. 数据与图形的分离:提供函数直接从randomForestSRC对象或后处理结果中提取数据,生成可供ggplot2绘图的中间对象

  2. 自包含的对象结构:每个数据对象/图形都是独立完整的,便于用户自定义修改

  3. 基于ggplot2的绘图系统:利用ggplot2的强大功能,用户可以灵活调整图形样式

本教程将使用MASS包中的波士顿房价数据,完整展示从数据探索、模型构建到结果可视化的全流程分析。

数据准备:波士顿房价数据集

波士顿房价数据集是回归分析的标准基准数据集,包含1970年波士顿506个普查区的数据。数据集中的变量包括:

  • crim:城镇人均犯罪率
  • zn:占地面积超过2.5万平方英尺的住宅用地比例
  • indus:非零售业务用地比例
  • chas:是否毗邻查尔斯河(逻辑变量)
  • nox:氮氧化物浓度(ppm)
  • rm:每栋住宅的平均房间数
  • age:1940年前建成的自住单位比例
  • dis:到波士顿五个就业中心的加权距离
  • rad:高速公路可达性指数
  • tax:每10万美元的全值财产税率
  • ptratio:城镇师生比
  • black:黑人比例指数
  • lstat:低收入人群百分比
  • medv:自有住房的中位数价值(单位:千美元)

探索性数据分析(EDA)

在建模前进行EDA是必不可少的步骤。我们使用ggplot2创建了两组面板图:

  1. 分类变量的箱线图
  2. 连续变量的散点图

特别地,我们将所有变量与响应变量(medv)的关系绘制在同一图中,并按照chas变量着色。这种可视化有助于识别异常值、缺失值和其他数据异常。

# 数据整理和可视化代码示例
library(tidyr)
library(ggplot2)

# 将数据转换为长格式
dta <- gather(Boston, variable, value, -medv, -chas)

# 绘制每个协变量与medv的关系图
ggplot(dta) +
  geom_point(alpha = 0.4, aes(x = medv, y = value, color = chas)) +
  geom_smooth(aes(x = medv, y = value), se = FALSE) + 
  labs(y = "", x = "Median Home Value (medv)") +
  scale_color_brewer(palette = "Set2") +
  facet_wrap(~ variable, scales = "free_y", ncol = 3)

从EDA图中可以明显看出,lstat(低收入人群百分比)和rm(房间数)与medv存在较强的相关性,这为我们后续的模型分析提供了初步验证。

随机森林回归模型

随机森林通过自助聚集(bagging)方法构建多棵CART树。基本流程包括:

  1. 生成B个自助样本
  2. 在每个子样本上独立构建树模型
  3. 每棵树通过递归分区生长,在每次分裂时从p个候选变量中随机选择m个进行最优分裂
  4. 每棵树的生长直到达到节点纯度或节点大小的停止标准
  5. 最终预测通过聚合所有树的终端节点结果得到

对于回归问题,分裂规则基于均方误差最小化;对于分类问题,则使用基尼指数。

模型构建

我们使用randomForestSRC包的rfsrc函数构建回归随机森林,预测medv变量:

library(randomForestSRC)

# 构建随机森林回归模型
rf_model <- rfsrc(medv ~ ., data = Boston, 
                 importance = TRUE, 
                 ntree = 1000,
                 nodesize = 5)

关键参数说明:

  • importance=TRUE:计算变量重要性
  • ntree=1000:生成1000棵树
  • nodesize=5:终端节点最小观测数为5

变量选择与重要性分析

随机森林使用所有可用变量构建预测模型,我们需要通过以下方法评估各变量的贡献:

变量重要性(VIMP)

VIMP衡量一个变量对模型预测准确性的平均贡献。计算方法是比较包含该变量与随机排列后的预测误差差异。

library(ggRandomForests)

# 提取并绘制VIMP
vimp_plot <- plot(gg_vimp(rf_model)) +
  labs(title = "Variable Importance") +
  theme(legend.position = c(0.8, 0.2))
print(vimp_plot)

最小深度分析

最小深度反映了变量在树结构中的平均首次分裂深度,值越小表示变量越重要。

# 最小深度分析
depth_plot <- plot(gg_minimal_depth(rf_model)) +
  labs(title = "Minimal Depth Ranking")
print(depth_plot)

通常我们会结合这两种方法进行变量选择,VIMP提供了变量对预测准确性的贡献度量,而最小深度则反映了变量在树结构中的位置重要性。

变量关系可视化

边际依赖图

展示单个变量与响应变量的整体关系趋势:

# 对重要变量绘制边际依赖图
var_dep <- gg_variable(rf_model)
plot(var_dep, xvar = "lstat") +
  labs(y = "Median Value", x = "Lower Status (%)") +
  geom_smooth()

部分依赖图

在调整其他变量影响后,展示变量与响应变量的"纯净"关系:

partial_dep <- plot(gg_partial(rf_model, xvar = "rm")) +
  labs(y = "Median Value", x = "Rooms per Dwelling") +
  geom_smooth()
print(partial_dep)

变量交互作用分析

随机森林能够自动捕捉变量间的交互效应。我们可以通过以下方法分析:

最小深度交互作用

评估变量在树结构中共同出现的频率和深度:

interaction_plot <- plot(gg_interaction(rf_model)) +
  labs(title = "Variable Interactions")
print(interaction_plot)

条件依赖图

展示在控制第三个变量条件下,两个变量间的关系:

# 绘制rm和lstat在不同chas条件下的关系
coplot_plot <- plot(gg_partial_coplot(rf_model, xvar = "lstat", 
                                     groups = "chas", 
                                     show.plots = FALSE))
print(coplot_plot)

结论

通过ggRandomForests包,我们能够全面探索随机森林回归模型的各个方面:

  1. 识别最重要的预测变量
  2. 理解变量与响应间的非线性关系
  3. 发现变量间的交互作用
  4. 直观展示复杂模型结构

这种方法特别适用于存在复杂非线性关系和交互作用的数据分析场景,为传统参数方法提供了有力的补充。通过本教程展示的技术,研究人员可以更深入地理解随机森林模型的预测机制,并有效传达分析结果。

随机森林的强大预测能力与ggRandomForests的可视化功能相结合,为回归分析提供了一个完整而灵活的工具集,特别适合处理现实世界中的复杂数据关系。

登录后查看全文
热门项目推荐

最新内容推荐

项目优选

收起
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
47
253
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
347
381
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
871
516
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
179
263
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
131
184
kernelkernel
deepin linux kernel
C
22
5
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
335
1.09 K
harmony-utilsharmony-utils
harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON等一系列的功能和操作,能够满足各种不同的开发需求。
ArkTS
31
0
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.08 K
0