【问题标题】:Why ctree is only returning a single terminal node in this case?为什么在这种情况下 ctree 只返回一个终端节点?
【发布时间】:2021-08-05 07:36:17
【问题描述】:

简介

我正在学习人工智能的基础知识。我创建了一个带有随机数据的 .csv 文件来测试Decision Trees。我目前在Jupyther Notebook 中使用 R。

问题

温度、湿度和风是决定您是否可以飞行的变量。

当我执行 ctree(vuelo~., data=vuelo.csv) 时,它只是一个单个节点,而 我期待一个包含变量(Temperatura、Humdedad、Viento)的完整树,正如我在纸上解决的那样。

Snippet of the result

使用的数据是下一张表:

   temperatura humedad viento vuelo
1          Hot    High   Weak    No
2          Hot    High Strong    No
3          Hot    High   Weak   Yes
4         Mild    High   Weak   Yes
5         Cool  Normal   Weak   Yes
6         Cool  Normal Strong    No
7         Cool  Normal Strong   Yes
8         Mild    High   Weak    No
9         Cool  Normal   Weak   Yes
10        Mild  Normal   Weak   Yes
11        Mild  Normal Strong   Yes
12        Mild    High Strong   Yes
13         Hot  Normal   Weak   Yes
14        Mild    High Strong    No

我不确定在导入数据时是否遗漏了什么,但我所做的是:

test <- read.csv("vuelo.csv")

备注

  • 我正在使用 R 中的“party”库(其中包含我从中获得一些想法的示例)

编辑:

这是dput() 请求的结果

structure(list(temperatura = structure(c(2L, 2L, 2L, 3L, 1L, 
1L, 1L, 3L, 1L, 3L, 3L, 3L, 2L, 3L), .Label = c("Cool", "Hot", 
"Mild"), class = "factor"), humedad = structure(c(1L, 1L, 1L, 
1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L), .Label = c("High", 
"Normal"), class = "factor"), viento = structure(c(2L, 1L, 2L, 
2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L), .Label = c("Strong", 
"Weak"), class = "factor"), vuelo = structure(c(1L, 1L, 2L, 2L, 
2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L), .Label = c("No", "Yes"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-14L))

【问题讨论】:

  • 嗨,您可以在您的数据上运行dput() 吗?这样,它将创建允许其他人轻松将数据读入 R 的代码。另见stackoverflow.com/a/5963610/5805670dput 部分)
  • @slamballais 如果我理解你的链接,那就是你要求的,对吧?
  • 是的,完美,谢谢!会去看看。

标签: r decision-tree


【解决方案1】:

回答

ctree 仅在达到统计显着性时才创建拆分(有关基础测试,请参阅 ?ctree)。在您的情况下,没有任何拆分这样做,因此没有提供拆分。

在您的情况下,您可以通过弄乱控件来强制完整的树(请参阅?ctree?ctree_control),例如像这样:

ctree(vuelo~., data = vuelo.csv, 
      control = ctree_control(minbucket = 0, 
                               minsplit = 0,
                               testtype = "Teststatistic",
                               mincriterion = 0))

但是,从统计的角度来看,这没有意义,我强烈建议不要这样做。

更合适的解决方案是在您的数据集中包含更多观察结果。假设温度、湿度和风与是否允许飞行存在潜在关联,您会通过更多观察发现它。

为了完整起见,如果我们在输出中使用plot,那么我们会得到包含所有(没有统计意义的)分支的树:

【讨论】:

  • 您能否推荐我使用如此小的数据集绘制决策树的其他选项?
  • 好吧,我提供的代码应该绘制完整的树,它不会是具有统计显着分支的树。如果您正在寻求一种在数据集中找到统计显着性的方法,那么您可能只是运气不佳:您只需要更多的观察。编辑:我添加了树的样子。
  • 非常感谢,这就是我想要的。已接受答案。
猜你喜欢
  • 1970-01-01
  • 2016-03-02
  • 2014-09-12
  • 2018-04-26
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多