3

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

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

  1. 非常多的功能意味着循环会很慢
  2. 重复乘法可能导致精度损失

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

我的问题是,采用这样的日志是一种合理/标准的方法吗?看起来这可能是显而易见的“101”方法,但我在实现这样的算法方面经验有限,所以我希望有更多经验的人提供反馈。


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

P(G=g| F = f )=P( F = f |G=g)P(G=g)/P( F = f )

将特征向量F扩展为 F 1..n给出

P(G=g|F 1 = f 1 , F 2 = f 2 ... F n = f n ) = P(F 1 = f 1 , F 2 = f 2 ... F n = f n |G =g)P(G=g)/P( F = f )

应用独立特征的朴素假设

P(G=g|F 1 = f 1 , F 2 = f 2 ... F n = f n ) = P(F 1 = f 1 |G=g) P(F 2 = f 2 |G=g ) ... P(F n = f n |G=g)P(G=g) / P( F = f )

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

P(G=g|F 1 = f 1 , F 2 = f 2 ... F n = f n ) ∝ P(F 1 = f 1 |G=g) P(F 2 = f 2 |G=g ) ... P(F n = f n |G=g)P(G=g)

这里,P(G=g) 是先验概率。

4

1 回答 1

3

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

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

自动目标识别应用程序(例如 Dempster-Schafer)中稳健分类器的许多实现强制概率始终为非零。你提出的是另一种方式来获得它。

于 2013-06-10T19:01:31.257 回答