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  
)
相关推荐
GZ同学17 天前
单双变量Ripley’s K函数 R 语言实现
开发语言·r语言
AI浩17 天前
模型剪枝与稀疏推理:结构化、非结构化、2:4 稀疏与大模型压缩(分层式精讲)
android·kotlin·剪枝
keykey6.17 天前
决策树:可解释的 if-else 规则
算法·决策树·机器学习
popcorn_min18 天前
共享单车需求预测:时间特征工程 + 随机森林,R² 达到 0.931
随机森林·r语言·kotlin
pen-ai18 天前
【HistGBM 系列①】从决策树到梯度提升 —— GBDT 原理精讲
算法·决策树·机器学习
码云骑士19 天前
12-GIL不是性能杀手(下)-绕过GIL的三种方案与决策树
算法·决策树·机器学习
林间码客20 天前
03(扩展)回归决策树(Regression Decision Tree)
决策树·数据挖掘·回归
一头老黄牛@20 天前
飞书 × OpenClaw 接入指南:不用服务器,用长连接把机器人跑起来
数据结构·人工智能·程序人生·算法·决策树·自动化·推荐算法
Smilecoc21 天前
决策树(三):剪枝
算法·决策树·剪枝
Smilecoc21 天前
决策树(四):决策树实战之鸢尾花分类
算法·决策树·分类