R 语言中决策树的非线性回归

在本帖中,您将发现 8 种在 R 中使用决策树进行非线性回归的方法。

本帖中的每个示例都使用了 R 自带的 datasets 包 中提供的 longley 数据集。

longley 数据集描述了从 1947 年到 1962 年观察到的 7 个经济变量,用于预测每年的就业人数。

立即开始您的项目,阅读我的新书《R 语言机器学习精通》,其中包含分步教程和所有示例的R 源代码文件。

让我们开始吧。

decision tree

决策树
照片作者:Katie Walker,部分权利保留

分类和回归树

分类和回归树 (CART) 根据使损失函数(如平方误差和)最小化的值来分割属性。

以下方法演示了在 longley 数据集上使用递归分割决策树方法。

了解更多关于 rpart 函数和 rpart 包 的信息。

条件决策树

条件决策树使用统计检验来选择属性的分割点,而不是使用损失函数。

以下方法演示了在 longley 数据集上使用条件推断树方法。

了解更多关于 ctree 函数和 party 包 的信息。

需要更多关于R机器学习的帮助吗?

参加我为期14天的免费电子邮件课程,了解如何在您的项目中使用R(附带示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

模型树

模型树创建决策树,并在每个节点使用线性模型进行预测,而不是使用平均值。

以下方法演示了在 longley 数据集上使用 M5P 模型树方法。

了解更多关于 M5P 函数和 RWeka 包 的信息。

规则系统

可以通过从决策树中提取和简化规则来创建规则系统。

以下方法演示了在 longley 数据集上使用 M5Rules 规则系统。

了解更多关于 M5Rules 函数和 RWeka 包 的信息。

Bagging CART

自助聚合 (Bagging) 是一种集成方法,它从同一数据集的不同子样本中创建多个同类型的模型。将每个独立模型的预测组合起来以提供更优的结果。这种方法已被证明对高方差方法(如决策树)特别有效。

以下方法演示了将 bagging 应用于递归分割决策树。

了解更多关于 bagging 函数和 ipred 包 的信息。

随机森林

随机森林是决策树 bagging 的一种变体,它通过减少每次决策点可用于创建树的属性来提高树的方差,因此需要更多的树。

了解更多关于 randomForest 函数和 randomForest 包 的信息。

梯度提升机

提升是一种为分类设计的集成方法,用于减少偏差,其中模型会学习现有模型的错误分类。它已通过梯度提升机 (GBM) 的形式进行泛化和改编,用于分类和回归的 CART 决策树。

了解更多关于 gbm 函数和 gbm 包 的信息。

Cubist

Cubist 决策树是另一种集成方法。它们的构建方式类似于模型树,但涉及一种称为“委员会”的类似提升的程序,该程序会生成规则状模型。

了解更多关于 cubist 函数和 Cubist 包 的信息。

总结

在本帖中,您了解了 8 种在 R 中用于非线性回归的决策树方法。每种方法都已准备好供您复制粘贴到自己的工作空间中,并根据您的需求进行修改。

有关更多信息,请参阅 Kuhn 和 Johnson 的著作 《应用预测建模》的第 8 章,该书为 R 语言初学者提供了关于非线性回归与决策树的绝佳入门。

在R中发现更快的机器学习!

Master Machine Learning With R

在几分钟内开发您自己的模型

...只需几行R代码

在我的新电子书中探索如何实现
精通 R 语言机器学习

涵盖自学教程端到端项目,例如
加载数据、可视化、构建模型、调优等等...

最终将机器学习应用到您自己的项目中

跳过学术理论。只看结果。

查看内容

16 条回复评论 R 中的非线性回归与决策树

  1. Sonika 2014 年 11 月 20 日 上午 4:07 #

    请告诉我 R 中的遗传算法代码,就像您上面提到的那样。

  2. Ron 2015 年 3 月 2 日 上午 1:19 #

    非常感谢这些指南。

  3. Will 2015 年 5 月 15 日 上午 11:33 #

    这里的 RMSE 应该是 sqrt(mean((actual-predicted)^2)) 吗?

  4. Matthew 2015 年 8 月 19 日 下午 12:00 #

    你好!我想问一下,当数据高度量化时,使用哪种决策树最好?例如,一个天气数据集。谢谢!

  5. Carlos Aguayo 2015 年 9 月 14 日 上午 11:44 #

    很棒的指南和网站!

    这句话有一个小小的拼写错误(crated -> created)
    “Rule Systems can be crated by extracting and simplifying the rules from a decision tree。”

  6. Bala 2015 年 10 月 13 日 下午 8:48 #

    我在决策树的排序方面需要一些澄清。我有一些特征。X1、X2、X3 可以标记为 Y。构建模型后,我需要根据特征 X1 预测树的排名。您能就此提出一些好方法吗?

  7. Arash 2015 年 12 月 1 日 下午 2:43 #

    非常感谢您 🙂
    简短但非常有用且全面

  8. R-lover 2015 年 12 月 14 日 上午 3:51 #

    但这并不是非线性回归——如果我没记错的话,这不就是多元线性建模吗?

    树方法(包括 RF、boosting 等)与实际的非线性回归(如酶动力学中使用的 Michaelis-Menton 模型、PK/PD 建模中使用的模型、非线性协同作用模型)之间有什么联系?

    期待听到您的想法。

  9. SFer 2016 年 11 月 26 日 上午 11:53 #

    “Will 2015 年 5 月 15 日 上午 11:33 #

    这里的 RMSE 不应该是
    sqrt(mean((actual-predicted)^2))?”

    Will 的评论(在上面)
    绝对正确!

    太可惜了,(这篇文章虽然很棒,但)作者
    没有回答并纠正这个错误
    在 rmse 计算中…

    使用正确的 rmse 公式(上面)
    会得到一个完全不同的 rmse 值…

    请注意…

  10. Gauthier 2018 年 3 月 28 日 下午 8:11 #

    嗨 Jason,非常感谢您的示例。您如何处理这些模型大多无法很好地泛化到新的验证数据这一事实?——在您的示例中使用 subset = 选项。只有规则系统和模型树似乎能正确泛化到我的数据

    data <- cbind(1:10000, -1:-10000,c(2:10001)+runif(10000,min=0,max=0.1))
    data <- cbind(1:10000, c(-1:-10000)+runif(10000,min=0,max=0.1))
    data <- cbind(data, 1000*c(1:10000)/10*sin(data[,1])+(data[,2]^2)/10+runif(10000,min=0,max=0.1)/100 ) #
    colnames(data) <- c("x1","x2","y")

    • Jason Brownlee 2018 年 3 月 29 日 上午 6:34 #

      这真的很依赖于数据。

      如果您发现一类适合您数据的方法,那就专注于它们。

  11. Jakes 2018 年 5 月 22 日 下午 5:26 #

    嗨,Jason,

    很棒的指南,感谢您让我们变得更强大。
    快速提问:如何从 R 中的随机森林树中提取规则/路径以用于预测的行?

    谢谢

    • Jason Brownlee 2018 年 5 月 23 日 上午 6:24 #

      谢谢。

      我不确定这是否可行,因为个别决策的数量非常庞大。

  12. Ibrahim chaoudi 2019 年 8 月 6 日 上午 2:24 #

    非常感谢

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。