【问题标题】:Naive Bays classifier: output percentage is too low朴素贝叶斯分类器:输出百分比太低
【发布时间】:2017-05-02 21:01:02
【问题描述】:

我正在为一个班级项目编写一个朴素贝叶斯分类器,我刚刚让它工作......有点。虽然我确实得到了无错误的输出,但获胜输出标签的输出概率为 3.89*10^-85

哇。

对于我可能做错的事情,我有几个想法。首先,我没有对类的输出百分比进行标准化,因此所有百分比实际上都为零。虽然这会给我看起来不错的数字,但我不知道这样做是否正确。

我的第二个想法是减少功能的数量。我们的输入数据是一个非常长的文本文件形式的伪图像列表。目前,我们的特征只是图像的每个像素的二进制值,而对于 28x28 的图像来说,这是很多特征。如果我将图像切成大小为 7x7 的块,那实际上会提高输出百分比多少?

tl;dr 以下是我试图了解的关于朴素贝叶斯的一般情况:

1) 是否需要标准化每个类的测试输出百分比?

2) 特征过多对结果有多大影响?

提前感谢您能给我的任何帮助。

【问题讨论】:

    标签: machine-learning normalization naivebayes


    【解决方案1】:

    这可能是正常的。朴素贝叶斯的输出并不意味着是真实的概率。它的意思是在竞争的班级中排序分数。

    概率如此之低的原因是,许多朴素贝叶斯实现是被分类实例的所有观察到的特征的概率的乘积。如果您正在对文本进行分类,则每个特征对于每个类的条件概率可能较低(例如:低于 0.01)。如果您乘以 1000 个特征概率,您很快就会得到您所报告的数字。

    此外,返回的概率不是给定实例的每个类的概率,而是给定类的观察这组特征的概率的估计。因此,您拥有的特征越多,观察这些确切特征的可能性就越小。使用贝叶斯定理将argmax_c P(class_c|features) 更改为argmax_c P(class_c)*P(features|class_c),然后通过进行独立假设进一步简化P(features|class_c),这允许将其更改为观察给定类别的每个单独特征的概率的乘积。这些假设不会改变 argmax(获胜类别)。

    如果我是你,我不会真正关心概率输出,而是关注分类器的准确性并采取措施提高准确性,而不是计算的概率。

    【讨论】:

    • 我投了赞成票,但是“真实概率”是什么意思?
    • 给定特征和先验,这不是真实的类概率。它只是对分数进行排序时有意义的值。在大多数实现所做的各种简化和假设中,“概率”的含义就丢失了,这没关系,因为它是一个分类器,我们想要的是找到最好的类。
    • 也就是说,如果您希望获得更具可读性的值,可以将它们标准化(将每个分数除以所有班级分数的总和)。
    • 嗯,好的。我在那个P(class_c|features) = **alpha***P(class_c)*P(features|class_c) 中遗漏了一个关键的东西,但是分类只计算P(class_c)*P(features|class_c),所以我必须对这些值进行标准化以获得我所说的概率。
    猜你喜欢
    • 2015-02-22
    • 2011-09-26
    • 2017-01-10
    • 2015-08-27
    • 2018-02-06
    • 2012-07-02
    • 2017-03-24
    • 2018-07-17
    相关资源
    最近更新 更多