Machine learning 对数字分类数据实现朴素贝叶斯高斯分类器

Machine learning 对数字分类数据实现朴素贝叶斯高斯分类器,machine-learning,classification,gaussian,naivebayes,Machine Learning,Classification,Gaussian,Naivebayes,我试图在数字分类数据上实现朴素贝叶斯高斯分类器。其中每个特征代表一个像素 在尝试实现这一点时,我遇到了一个问题,我注意到一些特性方差等于0。 这是一个问题,因为我在尝试求解概率时无法除以0 我能做些什么来解决这个问题 非常简短的回答是:你不能——尽管你通常可以尝试将高斯分布拟合到任何数据中(无论其真实分布如何),但有一个例外——常数情况(0方差)。那你能做什么呢?主要有三种解决方案: 忽略0方差像素。我不推荐这种方法,因为它会丢失信息,但如果每个类的方差为0(这是MNIST的常见情况-一些像素是

我试图在数字分类数据上实现朴素贝叶斯高斯分类器。其中每个特征代表一个像素

在尝试实现这一点时,我遇到了一个问题,我注意到一些特性方差等于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]。可以将多项式分布与bucketing结合使用,因此P(xebi | y)=#{xebi | y}/#{x | y}。最后,这通常是最好的(但需要对数据有一定的了解),因为问题是您试图使用的模型不适合提供的数据,我可以向您保证,适当的分布将始终为NB提供更好的结果。那么如何才能找到一个好的分布呢?为每个特征绘制条件边界P(xi | y),并查看它们的外观,基于该-选择与行为匹配的分布类,我可以向您保证这些不会看起来像高斯分布


  • 非常简短的回答是:您不能——尽管您通常可以尝试将高斯分布拟合到任何数据(无论其真实分布如何),但有一个例外情况——常数情况(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(xebi | y)=#{xebi | y}/#{x | y}。最后,这通常是最好的(但需要对数据有一定的了解),因为问题是您试图使用的模型不适合提供的数据,我可以向您保证,适当的分布将始终为NB提供更好的结果。那么如何才能找到一个好的分布呢?为每个特征绘制条件边界P(xi | y),并查看它们的外观,基于该-选择与行为匹配的分布类,我可以向您保证这些不会看起来像高斯分布


  • 你得到的小代码和错误截图会有帮助。你得到的小代码和错误截图会有帮助。