我的朴素贝叶斯训练数据需要成比例吗?

我将使用垃圾邮件分类作为例子。传统的方法是手动分类一组随机抽取的邮件,并使用这些邮件来训练朴素贝叶斯分类器。

很好,现在假设我添加了一大批我知道不是垃圾邮件的存档邮件。这会不会因为垃圾邮件与非垃圾邮件的比例不再具有代表性而扭曲我的分类器结果?我能想到的这种情况发生的两种方式是:

  • 特征变得过于偏向非垃圾邮件。
  • 算法在分类时隐式地使用了概率(垃圾邮件)(就像即使测试结果是阳性,医学状况的罕见性也会使概率(医学状况)降低一样)。

一般来说,更多的训练数据比少的更好,所以如果不破坏算法的话,我想添加这些数据。


回答:

可以使用所有数据进行训练,而无需担心比例问题。话虽如此,正如你所观察到的,扭曲比例会扭曲概率,导致不良结果。如果你的垃圾邮件流量为20%,但你用99%的垃圾邮件和1%的好邮件(非垃圾邮件)来训练垃圾邮件过滤器,你最终会得到一个过于激进的过滤器。

解决这个问题的一个常见方法是分两步进行:

  1. 通过让过滤器处理一组具有代表性的数据样本来初始化它(例如,在垃圾邮件过滤器场景中使用1,000封邮件)。
  2. 当过滤器遇到更多数据时,只有在过滤器判断错误时才更新权重。这被称为“错误训练”。

如果你遵循这种方法,你的过滤器不会被突然涌入的垃圾邮件所迷惑,这些垃圾邮件可能刚好包含了“trumpet”这样的词语以及真正属于垃圾邮件的词语。它只会在必要时进行调整,但当它判断错误时,会根据需要尽快调整。这是防止大多数垃圾邮件发送者现在采用的“贝叶斯毒化”方法的一种方式。他们可以在邮件中塞满大量垃圾,但他们描述其产品或服务的方式是有限的,这些词语总是与垃圾邮件相关。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注