我正在构建一个学习垃圾邮件/火腿电子邮件分类器作为一项任务。它不应该是一个很好的通用分类器,而是一个可以在一小组标记的用户电子邮件上学习的分类器(大约)。(假设垃圾邮件/火腿和个人特性的分发仍然大致相同,则对其余的信息进行分类。
我首先实现了一个简单的带有日志概率的朴素贝叶斯,其基础是:https://www.cs.rhodes.edu/~kirlinp/courses/ai/f18/projects/proj3/naive-bayes-log-probs.pdf
这是我的底线,我正在努力改进。我读了多篇关于这个问题的论文和文章,我试着实现一个更复杂的多项NB模型,但效果要差得多。
目前,分类器的数据仅来自消息体和主题(如果存在)。我还将消息作为一组单词来处理,并显式地从词汇表中删除一些单词,如" the“、"was”等。
考虑到很多消息都包含有链接、颜色代码、URL和电子邮件地址的HTML代码,这是我目前不使用的信息,我也希望从这些信息中获得信息。然而,事实证明,以某种数字稳定的方式这样做是极具挑战性的。
例如,在电子邮件地址和网址,我正在寻找非常明显的关键短语,如“点击”,“取消订阅”,“广告”,“现金”等。
我试着将常数加减到对数概率评分中,乘以0.999/1.001等因素,但在数值上似乎没有什么是稳定的,因素/常数的微小变化会导致精度上的大变化。
作业评分的质量分数假定假阳性的权重为10倍。我的当前过滤器通常在650条消息的数据集上产生0-5误报,但通常超过30条假阴性。在最困难的数据集(对我来说是黑匣子,不知道它是什么样子)上,我得到了94个假负片。
有更多经验的人会有一些如何处理计算的技巧吗?
谢谢!
发布于 2022-12-20 22:01:55
这听起来像是你想要提高你的垃圾邮件分类器的性能,增加额外的功能到你的模型。您可以考虑的一种方法是使用功能提取器函数从消息中的HTML代码和电子邮件地址中提取有用的信息。该函数可以以消息作为输入,并返回表示消息的特征向量。然后,您可以使用这个特征向量作为您的朴素贝叶斯分类器的输入。
要从HTML代码和电子邮件地址中提取有用的特性,可以考虑使用正则表达式来匹配特定的模式。例如,您可以使用正则表达式来匹配包含某些关键短语的电子邮件地址,例如“单击”、“取消订阅”、“广告”或“现金”。您还可以使用正则表达式来匹配包含这些关键字短语的URL,或者识别垃圾邮件中经常使用的特定HTML标记或属性。
除了使用正则表达式之外,还可以考虑使用其他技术从HTML代码和电子邮件地址中提取特性。例如,您可以使用自然语言处理技术来识别电子邮件文本中的关键短语或情感,或者使用机器学习技术来识别数据中的模式或异常。
一旦从消息中提取了这些特征,就可以使用这些特征来更新当前在朴素贝叶斯分类器中使用的日志概率分数。您可以通过将附加特性的日志概率加减到现有功能的日志概率中来做到这一点。
在增加或减去日志概率时要小心,因为日志概率的微小变化会导致概率的较大变化。为了避免这个问题,您可能需要考虑使用平滑技术,例如Laplace平滑,以平滑日志概率,并使您的模型对数据中的小变化更加健壮。
您可以尝试的另一种方法是使用一种更适合处理高维数据和大量特性的不同分类算法。例如,您可以尝试使用线性支持向量机(SVM)或随机林型分类器,这两种分类器在高维数据上都具有良好的性能。
如果您想继续使用朴素贝叶斯分类器,可以尝试使用Bernoulli朴素贝叶斯分类器,它是为二进制数据设计的,而不是为计数数据设计的多项式朴素Bayes分类器。这可能更适合您试图合并的特性类型。
在提高分类器性能方面,尝试使用交叉验证来评估不同模型和超参数配置的性能,并选择性能最好的模型和配置可能会有所帮助。您还可以尝试使用诸如特征选择等技术来识别分类任务中最重要的特性,并降低数据的维度。
我希望这能帮到你!如果你还有其他问题,请告诉我。
https://datascience.stackexchange.com/questions/117193
复制相似问题