random-forest - 使用默认的“randomForest”算法进行分类时,为什么终端节点数与案例数不匹配?
问题描述
根据https://cran.r-project.org/web/packages/randomForest/randomForest.pdf,分类树已经完全长大,这意味着节点大小 = 1。但是,如果树真的长到最大,那么应该每个终端节点都包含一个案例(数据点、物种等)?如果我运行:
library(randomForest)
data(iris) #150 cases
set.seed(352)
rf <- randomForest(Species ~ ., iris)
hist(treesize(rf),main ="number of nodes")
我可以看到大多数“完全成长”的树只有大约 10 个节点,这意味着节点大小不能等于 1...对吗?
例如,下面的 (-1) 表示森林中第 134 棵树的终端节点。只有8个终端节点!?
> getTree(rf,134)
left daughter right daughter split var split point status prediction
1 2 3 3 2.50 1 0
2 0 0 0 0.00 -1 1
3 4 5 4 1.75 1 0
4 6 7 3 4.95 1 0
5 8 9 3 4.85 1 0
6 10 11 4 1.60 1 0
7 12 13 1 6.50 1 0
8 14 15 1 5.95 1 0
9 0 0 0 0.00 -1 3
10 0 0 0 0.00 -1 2
11 0 0 0 0.00 -1 3
12 0 0 0 0.00 -1 3
13 0 0 0 0.00 -1 2
14 0 0 0 0.00 -1 2
15 0 0 0 0.00 -1 3
如果有人可以解释,我会很感激
解决方案
“完全成长”->“没有什么可分裂的”。如果分配给它的所有数据记录都保持/做出相同的预测,则决策树(a-的节点)是完全生长的。
在 iris 数据集的情况下,一旦您到达一个包含 50 个 setosa 数据记录的节点,将其拆分为两个子节点(每个节点分别包含 25 个和 25 个 setosas)是没有意义的。
推荐阅读
- python - Python Pandas:将日期转换为文本,例如 2018 年 8 月 --> 08-2018 或 01-08-2018
- python - Python Regex - Unicode 文本匹配的位置和值
- java - 无法在 Servlet 应用程序中使用 Thymeleaf 访问请求属性或参数
- c - 整数指针的动态内存分配
- c# - 如何从 C# 中的多个进程附加到共享文件?
- java - 杰克逊从地图中获取列表,其中键包含路径(如“child_1_name”)
- mongodb - 带有ufw防火墙的ubuntu服务器上的MongoDB:连接超时
- javascript - false=="0" 结果为真,但 !!"0" 结果为真
- python-3.x - 为什么 OpenCV 不显示存储在 numpy 数组中的图像?(Python)
- google-cloud-platform - 如何以 root shell 重启实例?