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  
)
相关推荐
临床数据科学和人工智能兴趣组9 小时前
网络爬虫(Web Scraping)是一种用于自动提取网页内容的技术
r语言·r语言-4.2.1
生态学者1 天前
Ecological Indicators | 机场鸟调的新方法:用 AWM-PC1 读懂干扰梯度下的鸟类群落
人工智能·算法·r语言·微信公众平台
临床数据科学和人工智能兴趣组1 天前
运用rvest包进行数据爬虫
r语言·r语言-4.2.1
霸道流氓气质2 天前
基于本地 PaddleOCR 的 PDF 文字识别完整技术文档
开发语言·r语言·pdf
临床数据科学和人工智能兴趣组2 天前
SQL专为数据操作而设计,能够高效执行复杂的查询、筛选、排序、分组等操作
r语言·r语言-4.2.1
青春不败 177-3266-05203 天前
基于R、Python的Copula变量相关性分析及AI大模型应用
人工智能·python·r语言·贝叶斯·统计学·copula
Smilecoc4 天前
决策树(五):决策树回归
算法·决策树·回归
统计学小王子4 天前
分类模型评价指标——R语言(数学建模常用)
数学建模·分类·r语言
营养充电站4 天前
VS Code Git 工作树:解锁多分支并行开发的高效体验
leetcode·决策树·逻辑回归·散列表·模拟退火算法
Biotree_20255 天前
Cell Death Dis.(IF=12.2)|厦门大学徐兵教授团队解锁滤泡性淋巴瘤治疗新策略:PI3Kδ与PPARα双靶向重塑代谢激活FoxO1
r语言