我正在尝试在数字分类数据上实现朴素贝叶斯高斯分类器。每个特征代表一个像素。
在尝试实现这一点时,我遇到了一个障碍,我注意到一些特征差异等于0。 这是一个问题,因为在尝试解决概率时,我无法除以0。
我可以做些什么来解决这个问题?
答案 0 :(得分:2)
非常简短的回答是你不能 - 即使你通常可以尝试将高斯分布拟合到任何数据(无论它的真实分布),都有一个例外 - 常数情况(0方差)。所以,你可以做什么?主要有三种解决方案:
忽略0方差像素。我不推荐这种方法,因为它会丢失信息,但如果它为每个类的0方差(这是MNIST的常见情况 - 一些像素是黑色,独立来自那么它实际上是数学上完全合理的。为什么?答案很简单,如果对于每个类,给定的特征是常量(等于某个单个值)那么它实际上没有分类信息,因此忽略它不会影响假定条件具有条件独立性的模型(例如NB)
而不是做MLE估计(所以使用N(mean(X),std(X)))使用正则化估计器,例如形式N(mean(X),std(X)+ eps) ,这相当于为每个像素独立地添加eps噪声。这是我推荐的一种非常通用的方法。
使用更好的分布类,如果您的数据是图像(并且因为您有0方差我假设这些是二进制图像,甚至可能是MNIST),您有K个特征,每个都在[0,1]间隔。你可以使用带有bucketing的多项分布,所以P(x e Bi | y)=#{x e Bi | y} /#{x | y}。最后这通常是最好的事情(但是需要一些你的数据知识),因为问题是你试图使用一个不适合所提供数据的模型,我可以保证你,正确的分配总能给NB带来更好的结果。那你怎么能找到一个好的发行版?绘制每个特征的条件边缘P(xi | y),看看它们是什么样的,基于此 - 选择与行为匹配的分布类,我可以向你保证这些看起来不像高斯。