我对 R 的 rpart 函数中的“权重”和“先验”有疑问。这个问题已经在这里问过,但答案并不完全有意义。
目前我有非常不平衡的数据,其中目标只是整个数据集的 0.0066%,它有超过 200 万行。我想知道“权重”或“先验”是否可以帮助我处理这个有偏见的数据集,以及如何使用它们。
我尝试对目标进行过采样并对噪声进行下采样,然后生成我的预测集合,但我没有达到预期的结果。
我对 R 的 rpart 函数中的“权重”和“先验”有疑问。这个问题已经在这里问过,但答案并不完全有意义。
目前我有非常不平衡的数据,其中目标只是整个数据集的 0.0066%,它有超过 200 万行。我想知道“权重”或“先验”是否可以帮助我处理这个有偏见的数据集,以及如何使用它们。
我尝试对目标进行过采样并对噪声进行下采样,然后生成我的预测集合,但我没有达到预期的结果。
我在这里看到两个问题。
weights
1)和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
是类权重,它处理不平衡的类大小。我相信这就是您正在寻找的。
parms
论点?如果您查看以下描述parms
:
对于分类拆分,列表可以包含以下任何一项:先验概率向量(先验分量),...
因此,您希望将先验概率向量存储在名称为“prior”的列表中。概率的顺序应该与 的输出完全相同levels(data$y)
,其中y
表示您的响应变量。例如,您可能想尝试以下操作:
fit <- rpart(y ~ x1 + x2 + x3, data = data, parms = list(prior = c(0.000066, 1 - 0.000066)))