使用 CHAID 包生成树时,Minbucket 不起作用

Posted

技术标签:

【中文标题】使用 CHAID 包生成树时,Minbucket 不起作用【英文标题】:Minbucket not working when producing trees with CHAID package 【发布时间】:2014-12-01 22:34:00 【问题描述】:

我一直在努力确保使用在 CHAID 包中实现的 CHAID 算法获得的分类树将生成一个具有至少minbucket 个观察值的终端节点(叶子)的树。根据 chaid 过程的描述,这可以通过指定 chaid_control 函数来完成:

chaid_control(alpha2 = 0.05, alpha3 = -1, alpha4 = 0.05,
              minsplit = 20, minbucket = 7, minprob = 0.01,
              stump = FALSE, maxheight = -1)

这与在 rpart 包中控制树的行为类似。

尽管如此,设置minbucket 参数似乎对生成树的最终形状没有任何影响。这是一个例子:

library("CHAID")
set.seed(290875)
USvoteS <- USvote[sample(1:nrow(USvote), 1000),]
chaid(vote3 ~ ., data = USvoteS)

Model formula:
vote3 ~ gender + ager + empstat + educr + marstat

Fitted party:
[1] root
|   [2] marstat in married
|   |   [3] educr <HS, HS, >HS: Gore (n = 311, err = 49.5%)
|   |   [4] educr in College, Post Coll: Bush (n = 249, err = 35.3%)
|   [5] marstat in widowed, divorced, never married
|   |   [6] gender in male: Gore (n = 159, err = 47.8%)
|   |   [7] gender in female
|   |   |   [8] ager in 18-24, 25-34, 35-44, 45-54: Gore (n = 127, err = 22.0%)
|   |   |   [9] ager in 55-64, 65+: Gore (n = 115, err = 40.9%)

Number of inner nodes:    4
Number of terminal nodes: 5

终端节点 3、4、6、8 和 9 分别由 311、249、159、127 和 115 个观测值组成。现在,通常情况下,为了限制最小数量的观察,应该如下进行:

ctrl <- chaid_control(minbucket = 200)

尽管如此,调用

chaid(vote3 ~ ., data = USvoteS, control = ctrl)

产生与以前相同的树(而不是具有至少 200 个观察值的节点的树)。

我不确定是我犯了错误还是在chaid过程的实现中遗漏了什么......

【问题讨论】:

【参考方案1】:

每个终端节点的最小观测数由minbucketminprob 控制。前者给出观察的绝对数量,后者给出相对频率(相对于当前节点的样本大小)。在内部,每个节点都使用两个数量的最小值。这对我来说也是违反直觉的,因为我原以为会使用 最大值 - 但我没有检查原始 CHAID 算法是否以这种方式描述。

如果要确保只有minbucket 控制最小节点大小,请设置minbucket = 200, minprob = 1

【讨论】:

谢谢!这解决了问题,现在一切都按预期工作!顺便说一句,您是否通过检查代码了解了所使用的两个数量的最小值(可能不是最大值),还是基于其他一些知识?

以上是关于使用 CHAID 包生成树时,Minbucket 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

rpart中的Minbucket和权重

使用R理解CART模型中的minbucket函数

使用trees包绘制带有一些松鼠的树时出错

机器学习算法决策树-4 CART算法和CHAID算法

普里姆算法(Prim)与最小生成树问题

遍历DOM树时Jsoup节点哈希码冲突