从不会到不怕——用R语言搞懂决策树

文摘   2024-11-30 00:04   德国  

决策树是什么?

决策树是一种可以用来分类或预测的模型。它通过一系列的“是/否”问题(即条件判断),最终将数据分到不同的类中或预测数值。
  • 根节点 (Root Node):树的起始节点,包含所有数据。
  • 内部节点 (Internal Nodes):用于分割数据的条件判断节点。
  • 叶节点 (Leaf Nodes):没有分支的节点,输出分类或预测的结果。

分类树和回归树

  • 分类树:用于分类问题,把数据分到不同的类别中。
  • 回归树:用于回归问题,预测数值(比如房价、温度等)。
本文讲解的是分类树,其目标是根据特征预测类别。

如何构建分类树

决策树的构建过程主要包括选择最合适的特征进行分裂、计算分裂后的“纯度”,以及根据纯度选择最优的分裂方式。
基尼不纯度 (Gini Impurity)
基尼不纯度用于衡量一个节点的“混乱程度”。它的值在0到1之间,值越小,表示节点中的数据越单一(即属于同一个类),值越大,表示节点中的数据越混杂。
基尼不纯度的计算公式如下:

分类树构建的具体步骤

假设我们有以下数据集,目标是预测一个人是否喜欢电影《Cool as Ice》:

我们需要根据这些数据构建一个分类树来预测某人是否喜欢《Cool as Ice》。
选择特征进行分裂
我们需要选择一个特征(比如“是否喜欢爆米花”、“是否喜欢汽水”或“年龄”)来分裂数据。我们通过计算基尼不纯度来判断哪个特征最适合用来分裂数据。
计算基尼不纯度
我们计算每个特征的基尼不纯度,选择不纯度最小的特征作为根节点。

R语言实现:构建分类树

我们使用R语言的rpart包来构建分类树。以下是详细步骤。
安装需要的包
# 安装rpartrpart.plotinstall.packages("rpart")install.packages("rpart.plot")
准备数据

接下来,我们创建一个数据框,将数据输入R:

# 加载包library(rpart)library(rpart.plot)
# 创建数据框data <- data.frame( Popcorn = c("Yes", "Yes", "No", "Yes", "No"), Soda = c("No", "Yes", "Yes", "No", "No"), Age = c(10, 12, 15, 8, 14), LikeCoolAsIce = c("No", "Yes", "Yes", "No", "No"))
# 将Yes/No变量转换为因子类型(分类数据)data$Popcorn <- factor(data$Popcorn, levels = c("No", "Yes"))data$Soda <- factor(data$Soda, levels = c("No", "Yes"))data$LikeCoolAsIce <- factor(data$LikeCoolAsIce, levels = c("No""Yes"))
构建分类树

使用rpart()函数来构建决策树:

# 构建分类树tree_model <- rpart(LikeCoolAsIce ~ Popcorn + Soda + Age, data = data, method = "class")# 查看决策树的模型摘要summary(tree_model)
可视化决策树

使用rpart.plot()来可视化决策树:

# 可视化决策树rpart.plot(tree_model)

模型评估与修剪

如果决策树过于复杂(即树的深度过大),它可能会“过拟合”训练数据。这意味着它在训练数据上表现很好,但在新数据上表现不好。为了防止过拟合,我们可以修剪决策树,限制树的深度或每个节点的最小样本数。

# 修剪树,控制每个节点的最小样本数tree_model_pruned <- rpart(LikeCoolAsIce ~ Popcorn + Soda + Age, data = data, method = "class", minsplit = 2, cp = 0.01)# 可视化修剪后的决策树rpart.plot(tree_model_pruned)
  • 决策树是一种用于分类或回归的模型,通过对数据进行分裂,最终得到预测结果。

  • 基尼不纯度是衡量数据纯度的一种方式,值越小表示数据越纯。

  • 通过R语言的rpart包,我们可以轻松地构建、评估并可视化分类树。

Dr Leo
ENT医生的科研分享
 最新文章