为朴素贝叶斯训练多少文件?
Posted
技术标签:
【中文标题】为朴素贝叶斯训练多少文件?【英文标题】:How many documents to train on for naive bayes? 【发布时间】:2015-10-28 20:21:43 【问题描述】:我刚刚从头开始创建了自己的朴素贝叶斯模型,并在 776 个文档上对其进行了训练。我尝试对文档进行分类,但在所有三个测试文档中都对文档进行了错误分类。甚至本应属于其他类别的概率最低的类别(这是三个测试文档中的两个)。
我应该增加培训文档的数量吗? 我不认为这是我的代码,因为我检查了计算但我不知道,也许 compute_numerators 函数在某种程度上是错误的?对于分子部分,由于下溢问题,我使用了日志,并总结了术语的概率和 (number_of_documents_in_category/overall_number_of_documents)
超级困惑和沮丧,因为这花了我这么长时间,现在我觉得它是徒劳的,因为它甚至没有正确分类一个文档:(
@鲍勃狄龙, 您好,感谢您认真的回复。我最大的问题是你所说的可分离是什么意思。你的意思是类之间的文件是否有明显的区别?我真的不知道该怎么回答。数据是由人类分类的,因此可以进行分离,但也许它与其他类型的类别如此接近以至于变得模糊?也许计算机无法识别归类为同一事物与另一类别的单词的差异?我必须保留这些类别,我不能重新排列类别,它们必须保持原样。我不确定如何在 R 中进行原型设计,我是否还需要获取文本数据并运行它?我是否还需要创建标记化等?我将研究信息增益和 SVM。我可能会回帖。谢谢!
【问题讨论】:
那么您将它与什么进行比较才能知道它是错误的?再加上统计数据中的神奇数字是 30。只要您有超过 30 个观察值,您的样本量就应该足够大。 那么测试文档已经分类了,我只是想看看它是否分类正确。我将预测与实际进行比较。是的,我有 776 个,所以肯定涵盖了 30 个基数,但也许文本分类需要更多?? 所以不要担心你的样品你很好。您要比较的引擎仍然没有意义。您的训练集与 R 或 Matlab 中的训练集不同吗?我仍然很困惑你怎么知道这是错的。 @FirebladeDan 引用“统计数据中的幻数是 30”?这听起来根本不对。 @IVlad - 我会认为你的证书是优越的。良好的输入 dlow 【参考方案1】:我刚刚从零开始创建了自己的朴素贝叶斯模型,并在 776 个文档上对其进行了训练
朴素贝叶斯,顾名思义,是一种朴素算法。与支持向量机或(深度)神经网络等现代方法相比,这非常糟糕。在使用它时您应该牢记这一点:期待比抛硬币给您带来更好的结果,但不是很多。
尝试对文档进行分类,但在所有三个测试文档上都对文档进行了错误分类
只有三个测试文件?这是非常少的,并没有告诉你什么。如果您的文档总数为 x
,则应至少使用 20%
进行测试。还可以考虑使用交叉验证。
我应该增加培训文档的数量吗?
这会有所帮助,是的。机器学习的一条黄金法则是,更多的数据通常会击败更好的算法。当然,我们不可能总是得到更多的数据,或者我们负担不起使用更多数据的处理能力,所以更好的算法很重要。
但为了能够看到改进,您还需要使用更多的测试数据。
结论:测试更多数据。如果您有779
文档,请至少使用100
进行测试或使用cross validation。如果您的准确度高于50-60%
,那就高兴了,这对于如此大量的数据和朴素贝叶斯来说已经足够了。
【讨论】:
@lVlad,感谢您的回复。我将测试增加到大约 400 个,但只有 3 个是正确的 :( 我将训练集增加到 6000 个,并将使用 1200 个文档作为测试集。我也在研究 SVM,我会尽快更新。再次感谢您!跨度> 【参考方案2】:你有很多不利于你的事情。
-
弱降维 - 仅限停用词过滤
多类分类
弱分类器
很少的训练数据
您向我们展示了您正在使用的代码,但如果数据不可分离,则不会对其进行排序。你确定数据可以分类吗?如果是这样,你期望什么表现?
在开始实施之前,您应该尝试对系统进行原型设计。使用 Octave、R 或 MatLab 是一个不错的起点。确保您的数据是可分离的,并且算法对您的数据有效。其他人建议使用 SVM 和神经网络而不是朴素贝叶斯分类。这是个好建议。每个都需要进行一些调整才能获得最佳性能。我使用 Google Prediction API 作为对系统性能的一阶检查,然后用 SVM 或其他分类器替换它以优化性能并降低成本/延迟/等。在潜水太深之前尽可能快速轻松地获得基线是很好的。
如果数据是可分离的,那么您为系统提供的帮助越多,它的性能就会越好。特征/降维消除噪声并帮助分类器表现良好。您可以进行统计分析来减少功能集。我喜欢信息增益,但还有其他的。
我发现this paper 是一种很好的文本分类理论处理方法,包括特征缩减。
我已经成功地使用信息增益来减少功能,并发现this paper 是一个非常好的实用指南。
至于训练数据的数量,这不是很明确。通常越多越好,但数据的质量也非常重要。如果数据不容易分离,或者潜在的概率分布与您的测试和野生数据不相似,那么即使有更多数据,性能也会很差。换句话说,训练数据的数量很重要,但质量至少同样重要。
祝你好运!
【讨论】:
以上是关于为朴素贝叶斯训练多少文件?的主要内容,如果未能解决你的问题,请参考以下文章