如何选择朴素贝叶斯分类器的训练数据

时间:2011-07-05 08:10:20

标签: machine-learning classification

我想仔细检查一些我不确定的关于分类器学习训练集的概念。当我们为训练数据选择记录时,我们是否每个类别选择相同数量的记录,总和为N还是应该随机选择N个记录(不管是哪个类别)?

直觉上我在考虑前者,但是考虑到先前的阶段概率是否相等而不是真的有用?

3 个答案:

答案 0 :(得分:7)

这取决于您的课程的分布,并且只能通过对手头问题的领域知识来做出决定。 您可以提出以下问题:

  • 是否有两个非常相似的类,学习者是否有足够的信息来区分它们?
  • 每个班级的先验概率有很大差异吗?

如果是这样,你应该重新分配这些类。

根据我的经验,重新分配课程没有坏处,但并不总是必要的。

这实际上取决于你的课程的分布。在欺诈或入侵检测的情况下,预测类的分布可小于1%。 在这种情况下,如果希望分类器了解每个类之间的差异,则必须在训练集中均匀分布类。否则,它将生成一个分类器,可以正确地对超过99%的案例进行分类,而无需正确识别欺诈案例,这是创建分类器的重点。

一旦你有一组均匀分布的类,你就可以使用任何技术,比如k-fold来进行实际训练。

需要调整类分布的另一个例子,不一定是每个类的记录数相同,就是从形状中确定字母表的大写字母。

如果您使用英语中常用的字母分布来训练分类器,那么Q字母几乎不会出现任何情况(如果有的话)。另一方面,字母O非常普遍。如果您不重新分发类以允许相同数量的QO,则分类器没有足够的信息来区分Q。您需要提供足够的信息(即更多Q s),以便确定QO确实是不同的字母。

答案 1 :(得分:1)

首选方法是使用K-Fold Cross验证来获取学习和测试数据。

来自维基百科的引用:

  

K折交叉验证

     

在K-fold交叉验证中,   原始样本是随机的   分为K个子样本。的   K个子样本,单个子样本   保留作为验证数据   测试模型,剩下的K.    - 1个子样本用作训练   数据。交叉验证过程是   然后重复K次(折叠),   使用每个K子样本   只需一次作为验证数据。   然后可以从折叠中得到K.   被平均(或以其他方式组合)到   产生一个估计。该   这种方法的优点是重复   随机的子采样就是这一切   观察用于两者   培训和验证,以及每个   观察用于验证   一次。 10倍交叉验证   常用。

     

在分层K折交叉验证中,   选择折叠使得   平均响应值约为   所有的折叠相等。如果是   这是一个二分类   意味着每个折叠大致包含   这两种类型的比例相同   班级标签。

您应该始终采用通用方法,以便与其他科学数据具有可比性。

答案 2 :(得分:1)

我构建了贝叶斯分类器的实现,通过检查示例中单词的出现来确定样本是否为NSFW(对工作不安全)。在训练用于NSFW检测的分类器时,我尝试过这样做,以便训练集中的每个类具有相同数量的示例。这并没有成功,因为我曾计划过,其中一个课程的每个例子比其他课程有更多的单词。

由于我根据这些词计算了NSFW的可能性,我发现根据实际大小(以MB为单位)来平衡类的工作。我尝试了两种方法的10交叉折叠验证(通过示例数量和类的大小进行平衡),并发现通过数据大小进行平衡效果很好。