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  
)
相关推荐
Smilecoc8 小时前
决策树(三):剪枝
算法·决策树·剪枝
Smilecoc8 小时前
决策树(四):决策树实战之鸢尾花分类
算法·决策树·分类
小糖学代码10 小时前
机器学习:8.决策树
人工智能·决策树·机器学习
Smilecoc1 天前
决策树(二):决策树的划分选择
算法·决策树·机器学习
Smilecoc1 天前
决策树(一):决策树基本原理
算法·决策树·机器学习
m0_497048931 天前
.NET10+Avalonia跨平台截屏工具解析
r语言
dongf20192 天前
R语言朴素贝叶斯算法---iris数据集
开发语言·算法·数据分析·r语言
All_Will_Be_Fine噻2 天前
重建R环境
开发语言·r语言
梦想的初衷~2 天前
基于R语言APSIM模型高级应用及批量模拟
r语言·apsim·作物生长模型·农业模拟·气象数据处理·土壤水分平衡
weisian1512 天前
基础篇--概念原理-25-大模型的剪枝是什么?怎么理解?——从原理到实战,一篇讲透
算法·机器学习·大模型·剪枝