在数字分类数据上实现朴素贝叶斯高斯分类器

implement Naive Bayes Gaussian classifier on the number classification data

我正在尝试对数字分类数据实施朴素贝叶斯高斯分类器。其中每个特征代表一个像素。

在尝试实现这一点时,我遇到了一个问题,我注意到一些特征方差等于 0。 这是一个问题,因为在尝试求解概率时我无法除以 0。

我该怎么做才能解决这个问题?

非常简短的回答是 你不能 - 尽管你通常可以尝试将高斯分布拟合到任何数据(无论其真实分布如何),但有一个例外 - 常量情况(0方差)。所以,你可以做什么?主要有以下三种解决方案:

  1. 忽略 0 方差像素。我不推荐这种方法,因为它会丢失信息,但是如果每个 class 的方差为 0 (这是 MNIST 的常见情况 - 一些像素是黑色的,independently from class) 那么它实际上在数学上是完全合理的。为什么?答案很简单,如果对于每个 class,给定的特征是常量(等于某个单一值),那么它实际上不会为 classification 带来任何信息,因此忽略它不会影响假设的模型特征的条件独立性(比如NB)。

  2. 而不是进行 MLE 估计(因此使用 N(mean(X), std(X)))使用正则化估计器,例如形式 N(mean(X), std(X) ) + eps),相当于给每个像素独立添加eps-noise。这是我推荐的一种非常通用的方法。

  3. 使用更好的分布class,如果你的数据是图像(并且由于你的方差为 0,我假设这些是二值图像,甚至可能是 MNIST)你有 K 个特征,每个特征在 [ 0, 1]区间。您可以将多项式分布与分桶一起使用,因此 P(x e Bi|y) = #{ x e Bi | y } / #{ x | y}。最后,这通常是 最好的 事情(但是需要对您的数据有一些了解),因为问题是您正在尝试使用不适合所提供数据的模型,并且我可以向你保证,适当的分配总是会带来更好的 NB 效果。那么如何才能找到好的分布呢?为每个特征绘制条件边际 P(xi|y),然后看它们的样子,基于此 - 选择与行为匹配的分布 class,我可以向你保证这些看起来不像高斯分布。