【发布时间】:2015-08-24 17:01:55
【问题描述】:
我从事图像分类工作。我正在使用一种称为先验概率的信息(在贝叶斯规则中)。它的范围在[0,1]. 并且需要对数计算。但是,如您所知,零数的对数是 Inf。
例如,给定图像I (size 3 by 3) 中的像素x,其成本函数为
Cost(x)=30+log(prior(x))
其中prior是一个矩阵3 by 3
prior=[ 0 0 0.5;
1 1 0.2;
0.4 0 0]
I =[ 1 2 3;
4 5 6;
7 8 9]
然后我想计算x=1 的成本
cost(x=1)=30+log(0)
现在,log(0) 是 Inf。然后结果cost(x=1) 和Inf。基于我的假设,prior=0 表示给定像素属于背景,prior=1 表示给定像素属于前景。
我的问题是如何计算log(prior) 满足我的假设。
我正在使用 Matlab 来执行此操作。我认为 log(0) 变成非常小的负值。我只是将它设置为-9 作为我的代码
%% Handle with log(0)
prior(prior==0.0) = NaN;
%% Compute log
log_prior=log(prior);
%% Assume that e^-9 very near 0.
log_prior(isnan(log_prior)) = -9;
更新:明确我在做什么。让我们看看贝叶斯规则。我的任务是如何分配给定像素 x 属于背景(BG)或前景(FG)。这取决于概率
P(x∈BG|x)=P(x|x∈BG)P(x∈BG)/P(x)
其中P(x|x∈BG)是似然函数,假设它是由高斯分布逼近的,P(x∈BG)是先验项,P(x)是常数,可以忽略
使用最大后验 (MAP) 估计,我们可以将上述方程映射到对数空间(以解决高斯函数中的指数)
Cost(x)=log(P(x∈BG|x))=log(P(x|x∈BG))+log(P(x∈BG))
为简单起见,假设log(P(x|x∈BG))=30,log(P(x∈BG)) 是log(prior),那么我的成本函数可以重写为
Cost(x)=30+log(prior(x))
现在的问题是先验在[0,1] 内,那么它的对数是-Inf。正如chepner所说,我们可以将eps值添加为
log(prior+eps)
但是,log(eps) 是一个更大的负数。它会影响我的成本函数(也变成非常大的负数)。然后我的成本函数(30) 中的第一项变得不必要了。基于我的假设 log(x)=1 那么像素 x 将是 BG 而prior(x)=1 将是 FG。计算成本函数时如何处理我的日志(之前)?
【问题讨论】:
-
0 的对数实际上是负无穷大,因为它随着 x 接近 0 无限减小。
-
是的。我知道。但是,当我用贝叶斯规则计算它时。当prior = 0时如何考虑该术语作为我的成本函数
-
是否存在某个区间
(0, eps],您知道prior(x)的值永远不会下降?也就是说,如果prior(x)不为零,那么它至少会是eps?如果是这样,请选择log(eps)作为 log(prior) 可以返回的最小值。否则,我看不出你给定的成本函数如何处理一个任意小的输入值,它不会给你一个比你为prior(x)==0“选择”的值更小的值。 -
在 Matlab 中,
log(0)返回-Inf,因此可以根据需要使用或替换它。这个问题,顺便说一句,不是 Matlab 问题 - 这是一个标准的“编程入门”问题,通过使用-Inf或在记录日志之前将eps添加到所有输入数据中,很容易解决 -
@user8430 我的观点是您的选择在很大程度上取决于您将记录的预期值,或者您选择的负无穷大替代值不能保证小于任何值的“真实”日志值。
标签: matlab image-processing computer-vision bayesian