R语言决策树剪枝----泰坦尼克数据集

R 复制代码
# 泰坦尼克号 决策树案例 (树层级多)

# 安装包
# install.packages(c("rpart", "rpart.plot", "titanic"))

library(rpart)       # 决策树
library(rpart.plot)   # 画图
library(titanic)      # 泰坦尼克数据集

# 加载数据
data("titanic_train")
df <- titanic_train
head(df)
# 数据预处理(决策树必须处理缺失值)
df$Age[is.na(df$Age)] <- median(df$Age, na.rm=TRUE)
df$Embarked[df$Embarked==""] <- "S"

# 把分类变量转成因子
df$Survived <- as.factor(df$Survived)
df$Pclass <- as.factor(df$Pclass)
df$Sex <- as.factor(df$Sex)
df$Embarked <- as.factor(df$Embarked)

训练模型

计算存活情况

R 复制代码
# --------------------
# 训练 深层决策树(层级多)
# --------------------
tree_full <- rpart(
  Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,
  data = df,
  method = "class",
  cp = 0,          # cp=0 → 不剪枝,树长到最复杂
  maxdepth = 8     # 允许树长得很深
)

# 画图:层级非常多!
rpart.plot(
  tree_full,
  main = "泰坦尼克号 深层决策树(层级多)",
  type = 4,
  extra = 101,
  cex = 0.7        # 字体缩小,才能显示多层
)

剪枝

CP = Complexity Parameter 复杂度参数

  • CP 越大 → 树越简单
  • CP 越小 → 树越复杂
  • CP=0 → 不剪枝,树长到最大
R 复制代码
print(tree_deep$cptable)
#找到 xerror 最小的那一行,取它的 CP
print(min(tree_deep$cptable[,'xerror']))

> print(tree_full$cptable)

CP nsplit rel error xerror xstd

1 0.444444444 0 1.0000000 1.0000000 0.04244576

2 0.030701754 1 0.5555556 0.5555556 0.03574957

3 0.023391813 3 0.4941520 0.5029240 0.03444798

4 0.020467836 4 0.4707602 0.4912281 0.03413963

5 0.014619883 5 0.4502924 0.4853801 0.03398272

6 0.007309942 6 0.4356725 0.5058480 0.03452394

7 0.006578947 10 0.4035088 0.4912281 0.03413963

8 0.004385965 14 0.3771930 0.4766082 0.03374384

9 0.002923977 16 0.3684211 0.4649123 0.03341867

10 0.000000000 18 0.3625731 0.4707602 0.03358222

R 复制代码
best_cp <- tree_full$cptable[which.min(tree_full$cptable[, "xerror"]), "CP"]
tree_pruned <- prune(tree_full, cp = 0.03)

rpart.plot(
  tree_pruned,
  main = "泰坦尼克号 深层决策树",
  type = 4,
  extra = 101,
  cex = 0.7  
)
相关推荐
统计学小王子13 小时前
数学建模国赛倒计时 2 天 ——《统计模型精讲(广义线性模型 R 语言实例 + 分析)》
开发语言·数学建模·r语言
统计学小王子18 小时前
数学建模国赛倒计时 2 天 ——《缺失值处理一(R语言)》
开发语言·数学建模·r语言
统计学小王子19 小时前
数学建模国赛倒计时 2 天 ——《异常值的处理(R语言)》
开发语言·数学建模·r语言
statistican_ABin2 天前
中国宠物经济发展分析报告——基于R语言的2018-2024年宠物市场多维度分析
开发语言·r语言·宠物
统计学小王子2 天前
数学建模国赛倒计时 3 天 ——《统计模型精讲(分位数回归R语言实现二)》
数学建模·回归·r语言
统计学小王子2 天前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言
生态学者4 天前
香港理工大学Nature Communications:沿海塑料际古菌组特征及生态影响
大数据·人工智能·算法·r语言·微信公众平台
a187927218314 天前
【算法】回溯算法(三):三记重锤与 N 皇后——记忆化、状态设计与三层漏斗
算法·leetcode·go·剪枝·回溯·n皇后·算法讲解
统计学小王子5 天前
数学建模国赛倒计时6天——《软件工具(R语言精讲)》
开发语言·数学建模·r语言
statistican_ABin5 天前
全球教育水平提升预测分析报告——基于R语言随机森林回归模型的全球40国1960-2020年教育水平预测研究
随机森林·回归·r语言