在本教程中,您将发现 7 种使用 R 决策树进行非线性分类的方法。
本教程中的所有方法都使用了 R 中自带的 iris flowers dataset (鸢尾花数据集),该数据集位于 datasets package 中。该数据集描述了鸢尾花的测量数据,需要对每个观测值进行分类,将其归为三种鸢尾花中的一种。
通过我新书 《R 机器学习精通》 开启您的项目,书中包含分步教程和所有示例的R 源代码文件。
让我们开始吧。

使用决策树进行分类
照片由 stwn 拍摄,保留部分权利
分类与回归树
分类和回归树 (CART) 通过分裂能够最小化损失函数(如均方误差之和)的属性来工作。
以下方法演示了在鸢尾花数据集上使用递归分割决策树方法。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 加载包 library(rpart) # 加载数据 data(iris) # 拟合模型 fit <- rpart(Species~., data=iris) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, iris[,1:4], type="class") # 总结准确度 table(predictions, iris$Species) |
了解更多关于 rpart 函数和 rpart 包的信息。
C4.5
C4.5 算法是 ID3 算法的扩展,它构建一个决策树以最大化信息增益(熵的差异)。
以下方法演示了在鸢尾花数据集上使用 C4.5(在 Weka 中称为 J48)决策树方法。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 加载包 library(RWeka) # 加载数据 data(iris) # 拟合模型 fit <- J48(Species~., data=iris) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, iris[,1:4]) # 总结准确度 table(predictions, iris$Species) |
了解更多关于 J48 函数和 RWeka 包的信息。
需要更多关于R机器学习的帮助吗?
参加我为期14天的免费电子邮件课程,了解如何在您的项目中使用R(附带示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
PART
PART 是一个规则系统,它为数据集创建剪枝的 C4.5 决策树,并提取规则,然后从训练数据中移除被规则覆盖的实例。这个过程会重复进行,直到所有实例都被提取的规则覆盖。
以下方法演示了在鸢尾花数据集上使用 PART 规则系统方法。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 加载包 library(RWeka) # 加载数据 data(iris) # 拟合模型 fit <- PART(Species~., data=iris) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, iris[,1:4]) # 总结准确度 table(predictions, iris$Species) |
了解更多关于 PART 函数和 RWeka 包的信息。
Bagging CART
自助聚集(Bagging)是一种集成方法,它从同一数据集的不同子样本中创建多个相同类型的模型。将每个独立模型的预测组合起来,以提供更优的结果。这种方法已被证明对于决策树等高方差方法特别有效。
以下方法演示了将 bagging 应用于鸢尾花数据集的递归分割决策树。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 加载包 library(ipred) # 加载数据 data(iris) # 拟合模型 fit <- bagging(Species~., data=iris) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, iris[,1:4], type="class") # 总结准确度 table(predictions, iris$Species) |
了解更多关于 bagging 函数和 ipred 包的信息。
随机森林
随机森林是决策树 bagging 的一种变体,它通过在每个决策点处将可用于生成树的属性减少到一个随机子样本来实现。这进一步增加了树的方差,并需要更多的树。
以下方法演示了将随机森林方法应用于鸢尾花数据集。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 加载包 library(randomForest) # 加载数据 data(iris) # 拟合模型 fit <- randomForest(Species~., data=iris) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, iris[,1:4]) # 总结准确度 table(predictions, iris$Species) |
了解更多关于 randomForest 函数和 randomForest 包的信息。
梯度提升机
提升是一种为减少偏差而开发的分类集成方法,其中模型被添加到学习现有模型中的误分类错误。它已被推广并以梯度提升机(GBM)的形式适应,用于 CART 决策树的分类和回归。
以下方法演示了在鸢尾花数据集上使用梯度提升机(GBM)方法。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 加载包 library(gbm) # 加载数据 data(iris) # 拟合模型 fit <- gbm(Species~., data=iris, distribution="multinomial") # 总结拟合 print(fit) # 进行预测 predictions <- predict(fit, iris) # 总结准确度 table(predictions, iris$Species) |
了解更多关于 gbm 函数和 gbm 包的信息。
Boosted C5.0
C5.0 方法是 C4.5 的进一步扩展,也是该系列方法的顶峰。它长期以来一直是专有软件,尽管最近代码已发布,并且可以在 C50 包中使用。
以下方法演示了在鸢尾花数据集上使用 C5.0 和 boosting 方法。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 加载包 library(C50) # 加载数据 data(iris) # 拟合模型 fit <- C5.0(Species~., data=iris, trials=10) # 总结拟合 print(fit) # 进行预测 predictions <- predict(fit, iris) # 总结准确度 table(predictions, iris$Species) |
了解 C50 包中 C5.0 函数的更多信息。
总结
在本教程中,您通过使用鸢尾花数据集,学习了 7 种使用 R 决策树进行非线性分类的方法。
每种方法都是通用的,可以直接复制粘贴并修改以适应您自己的问题。
嗨,Jason,
我有一个问题,如何使用 R 中的决策树对遥感数据进行土地利用类型分类?您能给我一些建议吗?非常感谢。
Jimmy
你好,
我对 R 的了解很少。最近我正在尝试进行基于规则的分类,我发现 R 有一个可以完成此任务的 C50 包。
我想问一下,是否可以通过添加一些优化代码或包来优化此包中的规则数量?
先谢谢您了。
此致,
Grace
感谢您的帖子…我尝试重现了每个场景。C5.0 的结果最好。我只是有一个评论。我无法在 GBM 下重现结果。我在以下行收到错误:predictions <- predict(fit, iris)
Error in paste("Using", n.trees, "trees…\n")
参数 "n.trees" 缺失,没有默认值
此致,
大卫
我遇到了同样的错误。我发现将参数 n.trees=iris$Species 放入其中可以修复该错误。现在我收到了一个错误,显示 Error in if (missing(n.trees) || any(n.trees > object$n.trees)) {
缺少 TRUE/FALSE 所需的值。
我正在努力查找 gbm 的 predict 的所有参数,但这很难。
你好,
我正在处理高度不平衡的数据。
您能否介绍一些在 R 中处理不平衡数据的方法?
此致
感谢您的建议。
喜欢您所有的页面!部分代码运行不畅🙁,尤其是在 predict() 方面。对于 GBM,type = “class” 不可用,因此不提供预测类别。这导致无法创建表格或混淆矩阵…我是否缺少某个包或其他东西?
继续您的出色工作!!
谢谢。
您能确认您已安装并更新了所有包到最新版本吗?