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

Posted

技术标签:

【中文标题】在数字分类数据上实现朴素贝叶斯高斯分类器【英文标题】:implement Naive Bayes Gaussian classifier on the number classification data 【发布时间】:2018-03-12 19:37:32 【问题描述】:

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

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

我可以做些什么来解决这个问题?

【问题讨论】:

您遇到的错误的小代码和屏幕截图会有所帮助。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于在数字分类数据上实现朴素贝叶斯高斯分类器的主要内容,如果未能解决你的问题,请参考以下文章

使用高斯朴素贝叶斯的多类分类

高斯朴素贝叶斯分类

分类-朴素贝叶斯(高斯多项式伯努利)

SciKit-learn - 训练高斯朴素贝叶斯分类器

朴素贝叶斯分类器(伯努利贝叶斯+高斯贝叶斯+多项式贝叶斯)

sklearn-朴素贝叶斯