R - 如何使用rpart?

7

我无法使用rpart获得太多信息。

我有一个数据框:

a = structure(list(V1 = c(2, 3, 4, 2, 3, 2, 3, 3, 5, 3), V2 = c(15, 
26, 94, 15, 26, 33, 33, 33, 5, 15), V3 = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("f", "t"), class = "factor")), .Names = c("V1", 
"V2", "V3"), row.names = c(NA, -10L), class = "data.frame")

> a
   V1 V2 V3
1   2 15  f
2   3 26  f
3   4 94  f
4   2 15  f
5   3 26  f
6   2 33  f
7   3 33  f
8   3 33  t
9   5  5  t
10  3 15  t

> rpart(V3 ~ ., data=a)
n= 10 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 10 3 f (0.7000000 0.3000000) *

为什么rpart没有提供更多信息,例如(V1 == 2)有三个案例都导致响应为"f" (第1,4,6行)的事实?
本质上,我想找出:
- rpart在给出上述输出之前运行了哪些测试? - rpart是否包括了一个测试(V2 == 2) -> 响应统计数据,如果没有,我如何使其包括这样的测试和结果?
我已经阅读了rpart vignette,但是没有找到答案。
2个回答

8
您的问题的简短回答可能是这样的:

题目的意思是什么?

rpart(V3 ~ V1 + V2,data = a,control = rpart.control(minsplit = 5))

因此,您可能需要花些时间阅读文档,特别是注重rpart.control。但更广泛地说,请注意rpart仍然没有基于V2 == 2的标准进行分割测试,仅因为该变量是连续的。所有连续变量上的拆分都将是简单的二进制不等式拆分。只有因子才会根据子集级别的选择进行拆分。

您链接的vignette包含了对函数选择所做的精确讨论(并引用了进一步的讨论),因此我不确定如何回应您的说法,即您已经阅读了它但没有找到答案。


谢谢。有没有办法获取rpart测试的列表? - Timothée HENRY
3
通常情况下,这是因为它(指某个测试)测试的基本上是全部内容。对于连续变量,会评估所有可能的分割点;对于分类变量,使用了一种技巧,可以证明等同于检查所有可能的组合(在0-1结果或回归结果的情况下;对于多元结果,只能逐个检查每个分割)。《统计学习基础》是一个非常好的参考书(PDF 可以免费在线获取)。 - joran
@joran:如果可能的话,你能否看一下我关于rpart的问题吗?https://stackoverflow.com/questions/65679523/r-obtaining-rules-from-a-function 谢谢! - stats_noob

5

如果您从?rpart开始,并按照Value下的信息操作,您将进入?rpart.object,其中会告诉您:

frame:数据框,每个节点对应一行。frame的行名按照节点深度进行二进制排序,并包含(唯一的)节点编号。frame的列包括var,一个因子,给出在每个节点处分裂使用的变量名称(叶节点用级别“”表示),n,达到节点的观测数,wt,观测到该节点的案例权重总和,dev,节点的偏差,yval,节点响应的拟合值,以及splits,每个节点左右分裂标签的两列矩阵。frame中还包括complexity,此分裂将崩溃的复杂性参数,ncompete,记录的竞争分裂数量,以及nsurrogate,记录的代理分裂数量。

可能存在的额外响应信息在yval2中,其中包含节点事件数(泊松树),或包含拟合类、每个节点的类计数、类概率和“节点概率”的矩阵(分类树)。

where:一个整数向量,与根节点中观测数相同长度,包含每个观测落入的叶节点的frame行号。

call:调用生成对象的图像,但参数都有名称,并且实际公式包括在公式参数中。要重新评估调用,请使用update(tree)。

terms:c(“terms”,“formula”)类对象(请参见terms.object),总结公式。由各种方法使用,但通常不直接与用户相关。

splits:描述分裂的数值矩阵:仅在存在时出现。行标签是分裂变量的名称,列是count,左侧或右侧发送的观测次数(权重为正且不缺失的观测),ncat,变量的类别或级别数(连续变量为+/-1),improve,此分裂给出的偏差改进,或对于代理,代理与主要代理的一致性,以及index,数字分裂点。最后一列adj给出了代理分裂的调整一致性。对于因子,索引列包含csplit矩阵的行号。对于连续变量,ncat的符号确定将子集x<cutpoint或x>cutpoint发送到左侧。

csplit:整数矩阵。(仅当至少有一个分裂变量是因子或有序因子时才存在。)每个这样的分裂都有一行,并且列数是因子中最大级别数。哪一行由分裂矩阵的索引列给出。列记录如果该因子级别向左,则为1;如果向右,则为3;如果在树的此节点上不存在该级别(或未定义该因子),则为2。

method:字符字符串,用于生长树的方法。其中之一是“class”,“exp”,“poisson”,“anova”或“user”(如果提供了分裂函数)。

cptable:基于复杂性参数的最优修剪信息的矩阵。

variable.importance:命名数字向量,给出每个变量的重要性。(仅当存在任何分裂时才存在。)当由summary.rpart打印时,这些被重新缩放以总和为100。

numresp:响应数的整数数量;对于因子响应


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接