r语言 - 取对数对重复乘法进行矢量化是正确的方法



我最近写了一个朴素贝叶斯的实现,将样本分为5个不同的组之一。特征n的数量非常大,每个特征可以是on(1)或off(0)。使用训练集,我估计了每个组G I 对每个特征Fj的条件概率的5 × n矩阵P,对于1≤I≤5,1≤j≤n,使cell (I,j) = P(G I =1|Fj=1)。(我忽略了概率P(G I =1|Fj=0),因为它们与本次讨论无关。)

我想做的是,给定一个新的例子E,一个1 × n的向量,将矩阵p中对应于新例子中存在的特征的条件概率相乘。我这样做有两个顾虑:

  1. 大量的功能意味着循环将非常缓慢
  2. 重复乘法可能导致精度损失

我所做的是取log(p) L=log(p)然后进行矩阵乘法。乘法得到1 × 5的结果,结果的最大值表明是哪一组,假设先验概率大致相等。这通过向量化解决了速度问题,通过取对数解决了准确性问题(当然,取对数将乘法转换为加法)。另一个优点是,E L'适用于一组训练示例,其中E是一个矩阵而不是一个向量。

我的问题是,这样做的日志是一个合理/标准的方法吗?这似乎是显而易见的"101"方法,但我实现这样的算法的经验有限,所以我希望从那些有更多经验的人那里得到反馈。


作为参考,在朴素贝叶斯方法中,贝叶斯定理给出了在g群中的概率条件为特征F= F

p (G = G | F = F ) = p ( F = F | G = G) p (G = G)/p ( F = F )

将特征向量F展开为F1。n 为

p (G = G | F <子> 1子> <子> 1,2 F <子> = F <子> 2子> n = F <子> n ) = P (F <子> 1子> <子> 1,2 F <子> = F <子> 2子> n = F <子> n | G = G) P (G = G)/P ( F = F )

应用独立特征的朴素假设

p (G = G | F <子> 1子> <子> 1,2 F <子> = F <子> 2子> n = F <子> n )= P (F <子> 1子> 1 | G = G) P (F <子> 2 = 2 F <子> | G = G)……P (F <子> n = F <子> n | G = G) P (G = G)/P ( F = F )

分母可以去掉,因为它对所有g都是一样的,所以我们有

p (G = G | F <子> 1子> <子> 1,2 F <子> = F <子> 2子> = Fn) ∝

1> = F <子> 1 | G = G) P (F <子> 2 = 2 F <子> | G = G)……P (F <子> n = F <子> n | G = G) P (G = G)

这里p (G= G)为先验概率

我假设你已经重写了exp '的乘法来处理你用log(p)表示p的事实?

用概率的对数表示条件概率是一种非常常见的技术,可以解决它们可能变得非常小的事实。

在自动目标识别应用中,许多鲁棒分类器的实现(例如Dempster-Schafer)强制概率始终为非零。你所提出的是另一种方法。

相关内容

  • 没有找到相关文章

最新更新