rpart中权重和先验之间的差异以及如何使用它们

机器算法验证 r rpart
2022-03-27 02:34:14

我对 R 的 rpart 函数中的“权重”和“先验”有疑问。这个问题已经在这里问过,但答案并不完全有意义。

目前我有非常不平衡的数据,其中目标只是整个数据集的 0.0066%,它有超过 200 万行。我想知道“权重”或“先验”是否可以帮助我处理这个有偏见的数据集,以及如何使用它们。

我尝试对目标进行过采样并对噪声进行下采样,然后生成我的预测集合,但我没有达到预期的结果。

1个回答

我在这里看到两个问题。

weights1)和parms什么区别rpart

如果您查看代码,weights参数被传递给model.frame对象,因此它应该应用于数据集的每个观察,就像在lm.

if (is.data.frame(model)) {
    m <- model  ## <---- m is defined here
    model <- FALSE
}
else {
    indx <- match(c("formula", "data", "weights", "subset"), 
        names(Call), nomatch = 0L)
    if (indx[1] == 0L) 
        stop("a 'formula' argument is required")
    temp <- Call[c(1L, indx)]
    temp$na.action <- na.action
    temp[[1L]] <- quote(stats::model.frame)  ## <---- passed to model.frame
    m <- eval.parent(temp)
}
Terms <- attr(m, "terms")
if (any(attr(Terms, "order") > 1L)) 
    stop("Trees cannot handle interaction terms")
Y <- model.response(m)
wt <- model.weights(m)  ## <---- used as observation weights

另一方面,parms是类权重,它处理不平衡的类大小。我相信这就是您正在寻找的。

2)如何使用parms论点?

如果您查看以下描述parms

对于分类拆分,列表可以包含以下任何一项:先验概率向量(先验分量),...

因此,您希望将先验概率向量存储在名称为“prior”的列表中。概率的顺序应该与 的输出完全相同levels(data$y),其中y表示您的响应变量。例如,您可能想尝试以下操作:

fit <- rpart(y ~ x1 + x2 + x3, data = data, parms = list(prior = c(0.000066, 1 - 0.000066)))