我正在为一个班级项目编写一个天真的贝叶斯分类器,我只是让它工作......有点儿。虽然我获得了无错输出,但获胜输出标签的输出概率为3.89 * 10 ^ -85 。
哇。
我有几个想法,我可能做错了什么。首先,我没有规范类的输出百分比,因此所有百分比实际上都是零。虽然这会给我看起来不错的数字,但我不知道这是否正确。
我的第二个想法是减少功能的数量。我们的输入数据是一个非常长的文本文件形式的伪图像列表。目前,我们的功能只是图像每个像素的二进制值,而28x28图像具有很多功能。如果我将图像切割成大小的块,比如7x7,实际上会提高多少输出百分比?
tl; dr 以下是我试图了解幼稚贝拉斯的一般事项:
1)您是否需要对测试每个班级的输出百分比进行标准化?
2)有太多功能对结果有多大影响?
提前感谢您提供的任何帮助。
答案 0 :(得分:3)
这可能是正常的。朴素贝叶斯的输出并不是真正的概率。它的目的是在竞争类别中订购分数。
概率如此之低的原因在于,许多朴素贝叶斯实现是被分类的实例的所有观察到的特征的概率的乘积。如果要对文本进行分类,则每个特征可能对每个类具有较低的条件概率(例如:低于0.01)。如果您将1000个特征概率相乘,您很快就会得到如您所报告的数字。
此外,返回的概率不是给定实例的每个类的概率,而是给定该类的观察这组特征的概率的估计。因此,您拥有的功能越多,观察这些确切功能的可能性就越小。贝叶斯定理用于将argmax_c P(class_c|features)
更改为argmax_c P(class_c)*P(features|class_c)
,然后通过进行独立性假设进一步简化P(features|class_c)
,这允许将其更改为观察每个单独要素的概率的乘积给上课。这些假设不会改变argmax(获胜类)。
如果我是你,我不会真正关心概率输出,而是关注分类器的准确性,并采取措施提高准确性,而不是计算概率。