rpart 默认情况下是否使用多元拆分?

机器算法验证 r 多元分析 大车
2022-03-12 11:34:24

我知道 R 的rpart函数保留了实现多元拆分所需的数据,但我不知道它是否真的在执行多元拆分。我已经尝试通过查看文档在线研究它rpart,但我没有看到任何可以做到或正在做的信息。有谁肯定知道吗?

4个回答

Rpart 仅提供单变量拆分。我相信,根据您的问题,您并不完全熟悉单变量分区方法和多变量分区方法之间的区别。我已尽力在下面解释这一点,并为进一步研究提供一些参考,并建议一些 R 包来实现这些方法。

Rpart 是一个基于树的分类器,使用递归分区。使用分区方法,您必须在数据中定义要进行拆分的点。R 中的 rpart 算法通过找到变量和最佳分割(从而减少)RSS 的点来做到这一点。因为拆分一次只发生在一个变量上,所以这些是单变量拆分。多变量拆分通常定义为沿多个轴(因此是多变量)同时划分,即第一个 rpart 节点可能沿 Age>35 拆分,第二个节点可能沿收入 >25,000 拆分,第三个节点可能沿 Cities 以西拆分密西西比河。第二个和第三个节点在整体数据的较小子集上进行拆分,因此在第二个节点中,收入标准最好仅针对年龄超过 35 岁的人拆分 RSS,它不适用于在此节点中未找到的观测值,同样适用于 Cities 标准。可以继续这样做,直到数据集中的每个观察都有一个节点(rpart 使用最小桶大小函数以及最小节点大小标准和 cp 参数,该参数是 r 平方值必须增加的最小值,以便继续拟合)。

多变量方法,例如 Patient Rule Induction Method(R 中的 prim 包)将通过选择收入大于 22,000、Age>32 和 Cities of Atlanta 的所有观察同时进行拆分。拟合可能不同的原因是因为拟合的计算是多变量的而不是单变量的,这三个标准的拟合是基于三个变量同时拟合所有符合这些标准的观察值来计算的,而不是基于迭代划分单变量拆分(与 rpart 一样)。

关于单变量与多变量划分方法的有效性存在不同的看法。一般来说,我在实践中看到的是,大多数人出于解释目的更喜欢单变量分区(例如 rpart)(它仅在处理结构非常明确且变量之间的变化相当的问题时用于预测常数,这就是为什么这些经常用于医学)。单变量树模型在用于预测时通常与集成学习器相结合(即随机森林)。确实使用多元分区或聚类(与多元分区密切相关)的人通常会为单变量方法非常不适合的复杂问题这样做,并且这样做主要是为了预测,或将观察结果分组。

我强烈推荐 Julian Faraway 的书用 R 扩展线性模型。第 13 章完全致力于树的使用(都是单变量的)。如果您对多元方法进一步感兴趣,请参阅 Hastie 等人的 Elements of Statistical Learning。al,提供了许多多变量方法的出色概述,包括 PRIM(尽管斯坦福大学的弗里德曼在他的网站上发布了关于该方法的原始文章),以及聚类方法。

关于使用这些方法的 R 包,我相信您已经在使用 rpart 包,并且我在上面提到了 prim 包。内置的聚类例程有很多种,我很喜欢这个线程中另一个人提到的party包,因为它在决策树构建过程中实现了条件推理。optpart 包允许您执行多变量分区,而 mvpart 包(也被其他人提到)允许您执行多变量 rpart 树,但是我个人更喜欢使用 partDSA,它可以让您在树中进一步组合节点以帮助防止类似的分区观察,如果我觉得 rpart 和 party 不足以满足我的建模目的。

注意:在第 2 段中的 rpart 树示例中,我描述了分区如何与节点编号一起工作,如果要绘制这棵树,如果拆分规则为真,则分区将向左进行,但是在 RI如果规则为真,则相信分裂实际上是向右进行的。

据我所知,它没有;但有一段时间没有使用它。如果我理解你,你可能想看看 package mvpart

您的术语令人困惑。由于您的意思是使用多个变量进行拆分,还是使用允许多变量(而不是单变量)响应的树?我推测是后者。

F. Tusell 向您介绍了 mvpart 包,它为节点杂质添加了一个多变量标准,该标准在树构建的每个阶段针对所有可能的拆分进行评估。

另一种选择是派对包,它的功能ctree()可以处理多变量响应。

CART 书中定义的多变量拆分未在rpart. Salford Systems 的 CART 软件包具有此功能,但 AFAIK 它使用了 Breiman、Friedman 等人许可的专有算法。