提问人:gtoques 提问时间:5/3/2022 更新时间:5/3/2022 访问量:63
根据对数分数计算概率
compute probabilities from log scores
问:
我正在使用 R 并执行以下任务。假设我可以访问 和 ,并且我想计算 。进一步假设 和 非常负,例如 -1000,那么我如何以最有效的数值方式进行计算?请记住,由于下溢,将输出 0。log(a)
log(b)
a/(a+b)
log(a)
log(b)
a/(a+b)
exp(log(a))
我应该如何在 R 中执行此操作?
请考虑以下测试用例:
log_a = log(2e-100)
log_b = log(4e-100)
我想要一个可以将这些作为对数分数和输出的函数。0.33
答:
1赞
Rui Barradas
5/3/2022
#1
以下函数是用户 Joris Meys 在此 SO 帖子中代码的转录本,因此函数的名称为 。joris
naive <- function(lx, ly) {
ex <- exp(lx)
ey <- exp(ly)
ex/(ex + ey)
}
logxpy <- function(lx, ly) {
max(lx, ly) + log1p(exp(-abs(lx - ly)))
}
joris <- function(lx, ly) {
exp(lx - logxpy(lx, ly))
}
log_a <- log(2e-100)
log_b <- log(4e-100)
log_x <- -1000
log_y <- -1001
naive(log_a, log_b)
#> [1] 0.3333333
joris(log_a, log_b)
#> [1] 0.3333333
naive(log_x, log_y)
#> [1] NaN
joris(log_x, log_y)
#> [1] 0.7310586
创建于 2022-05-03 由 reprex 软件包 (v2.0.1)
评论