朴素贝叶斯对训练观察的数量敏感吗?
Posted
技术标签:
【中文标题】朴素贝叶斯对训练观察的数量敏感吗?【英文标题】:Is Naive Bayes sensitive to the number of training observations? 【发布时间】:2017-08-05 02:01:58 【问题描述】:我正在使用 Swift(即使我的问题不是关于语言)和 Python 来测试我的机器学习逻辑。我有训练数据:
("add a new balloon", "add-balloon")
("add a balloon", "add-balloon")
("get last balloon", "get-balloon")
("update balloon color to red", "update-balloon")
当我尝试使用朴素贝叶斯对一个新句子进行分类时,例如
classify("could you add a new balloon")
// Return add-balloon
classify("could you update the balloon color")
// Return add-balloon
classify("update the balloon color")
// Return add-balloon
我的数据集有很多关于添加气球的观察结果(大约 50 个),但没有太多需要更新或获取(大约 5-6 个)。我不明白为什么即使给出它在训练期间看到的句子,分类也表现不佳。
【问题讨论】:
您的问题与 Swift 或 Python 无关,因此这些标签无关紧要。 是的,我更新了!是一个 SO 建议,我的错 哦,真的。我不知道发生了什么可能是因为我已经在编辑并标记了我的编辑表单中的位置?对此感到抱歉,感谢您花时间编辑我的问题。 @Ludovic 可能是一个小故障。我已经看到了这种情况。也许我们同时编辑。没问题。 :) 【参考方案1】:朴素贝叶斯对类先验(示例在类之间的分布)很敏感。因此,如果您的 add-balloon
比其他类别多得多,那么它就会偏向该类别。这通常很有帮助,因为假设您什么都不知道(没有后验信息),您最好的选择是尝试最有可能的课程。
如果您的分布严重偏斜,您的数据集不大,您的文档很短或缺少信息量很大的词(或包含许多模棱两可的词),这可能会导致不希望的结果,例如您所报告的内容。
【讨论】:
感谢您的回答。当我找不到给定类的更多数据时,解决方案是什么?在我的示例中(真正的应用程序是法语),有很多方法可以说“添加气球”,但没有很多方法可以说“更新气球”我应该添加如下数据:“将气球颜色更新为红色”、“更新气球”颜色为蓝色”等。这有点棘手 在构建数据集时,您应该尝试使用尽可能接近分类器预期看到的内容。如果您希望看到 10% 的附加气球实例,那么您应该在训练集中有 10% 的该类。如果您没有其他选择来反映预期的类分布,那么没有什么可以阻止您复制数据。但请注意,手动制作数据集并不是一种正确的数据采样方法,但如果仔细完成它可能会奏效。最好的办法是拥有真实数据,然后使用适当的抽样方法将其拆分为训练/测试/验证集。 对于真实数据我会尝试,即使真实数据窃取的“add-balloon”比“update-balloon”多? 是的,如果真实数据有更多,最好在训练数据中有更多。朴素的分类器会偏向添加气球,这是可以的(在某种程度上)。最终,确定类别的是后验概率(文本的内容),但为此您需要在内容中包含足够多的预测词【参考方案2】:最初,朴素贝叶斯取决于数据的大小,但如果我们继续添加更多,在一定水平之后,它的性能平台和训练数据的进一步增加并不会提高朴素贝叶斯分类器的性能。
但就您而言,数据太小,模型无法准确了解“更新气球”并预测“添加气球”。尝试为数据较少的类添加更多示例,看看准确性是否提高。
如果您的数据出现偏差并且您无能为力,您可以尝试其他分类器或尝试here 和here 中提到的一些技巧。
【讨论】:
Pascal 说“朴素贝叶斯对类先验很敏感”,如果我添加更多示例,这仍然失败吧? 嗯,朴素贝叶斯确实对训练数据在类之间的分布很敏感。所以,理想情况下,没有。跨类的训练样本的数量应该相等,或者在数据不平衡的情况下,与测试/生产中的相同。如果您必须处理这种倾斜的数据,一种解决方案是标准化与每个类相关的字数。参考这个:cs.waikato.ac.nz/~eibe/pubs/FrankAndBouckaertPKDD06new.pdf 我已经更新了答案以包含更多信息,由于字符限制,我无法在此处添加 感谢您的回答。这对我有帮助。以上是关于朴素贝叶斯对训练观察的数量敏感吗?的主要内容,如果未能解决你的问题,请参考以下文章