是采取日志向量化重复乘法正确的方法?

时间:2013-06-10 18:53:33

标签: r matlab machine-learning linear-algebra vectorization

我最近编写了Naive Bayes的实现,将示例分为5个不同的组中的一个。特征的数量n非常大,并且每个特征可以是(1)或关闭(0)。使用训练集,我针对每个特征F j 估计每个组G i 的条件概率的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. 重复乘法可能会导致精确度下降
  3. 我所做的是取P的对数,L = log(P),然后执行矩阵乘法E L'。乘法给出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 扩展为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 < / sub> = f 2 ... F n = f n | G = g)P(G = g)/ P(< strong> 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 =克)p(G = G)

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

1 个答案:

答案 0 :(得分:3)

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

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

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