我正在尝试在数字分类数据上实现朴素贝叶斯高斯分类器。每个要素代表一个像素。
尝试实现此功能时,我遇到了麻烦,我注意到某些功能差异等于0。
这是一个问题,因为尝试求解概率时我将不能除以0。
我该怎么办才能解决此问题?
最佳答案
非常简短的答案是您不能-即使您通常可以尝试使高斯分布适合任何数据(无论其真实分布如何),也有一个例外-恒定情况(0方差)。所以,你可以做什么?有三种主要解决方案:
忽略0方差像素。我不推荐这种方法,因为它会丢失信息,但是如果每个类别的方差均为0(这是MNIST的常见情况-某些像素是黑色的,与类别无关),则实际上在数学上是完全合理的。为什么?答案很简单,如果对于每个类,给定的特征是恒定的(等于某个单一值),那么它实际上不会带来任何分类信息,因此忽略它不会影响假设特征具有条件独立性的模型(例如NB) 。
而不是进行MLE估计(因此使用N(mean(X),std(X)))使用正则化估计器,例如形式为N(mean(X),std(X)+ eps),这等效于eps噪声独立于每个像素。我建议这是一种非常通用的方法。
使用更好的分布类,如果您的数据是图像(并且由于您有0个方差,我假设这些是二进制图像,甚至是MNIST),则您具有K个特征,每个特征的间隔为[0,1]。您可以对桶进行多项式分布,因此P(x e Bi | y)=#{x e Bi | y} /#{x | y}。最后,这通常是最好的做法(但是需要一些数据知识),因为问题是您正在尝试使用不适合提供的数据的模型,我可以向您保证,正确的分配将始终使用NB可获得更好的效果。那么,如何才能找到一个好的分布?为每个特征绘制条件边际P(xi | y),并看它们的外观,在此基础上-选择与行为匹配的分布类别,我可以向您保证,它们不会像高斯。
关于machine-learning - 在数字分类数据上实现朴素贝叶斯高斯分类器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46513538/