微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用不平衡数据来创建准确的多类多项式朴素贝叶斯

如何解决如何使用不平衡数据来创建准确的多类多项式朴素贝叶斯

我已经使用sklearn创建了一个基本的多类朴素贝叶斯文本分类器。我有3个班级,大约有800行数据。 A类有564行,B类有159行,C类有82行。如您所见,各类之间的数据不平衡,我理解这会影响准确性,因为贝叶斯定理考虑了单词在中出现的可能性。给定文本属于特定类别的文本,以便找出给定文本在该类别中的单词的概率。这是我的第一次尝试,我计划获取更多数据,因为您可能会想到A类是最容易获得的,而C类却是最难获得的。

但是,我对于应该如何创建和改进此模型以及应该如何平衡类数据集感到困惑。如果我要获得每个类别的完美比例数据,比如说每个类别有1000行数据,或者对我已经拥有的数据进行欠采样,这也会影响准确性吗?因为实际上,实际上出现类别C的可能性绝对小于A和B。实际上,类别的比例与文本属于该类别的可能性有些相似(尽管因人而异)。并且由于贝叶斯定理还考虑了文本属于特定类别的概率,以计算文本包含特定单词的概率属于特定类别,因此不会创建数量相等的平衡数据集每个类的行数降低了准确性,因为没有考虑某个类在生产中出现的概率,因为该概率现在基本上是恒定的,并且对于所有类来说,由于概率相等,所以概率相同。尽管使所有类相等,但确实消除了由于数据集不平衡而造成的单词偏差。

所以我不确定如何有效地创建该模型,就像我对不平衡的数据的感觉一样,该模型认为C类中的常用词更有可能出现在A类电子邮件中,而实际上它们可能更多在C语言中很常见,但偏斜的数据正在造成这种偏差。另一方面,尽管我无法计算出适用于所有个体的每个类别的通用概率,但使各个类别保持平衡会忽略一段文本成为特定类别的实际概率(这意味着使各个类别成为平衡对准确性的负面影响较小?)。任何指导都将不胜感激,我对此还很陌生。

解决方法

Tldr;不要欠采样/过采样,而应使用文本增强。

在某些情况下,欠采样/过采样可能会有所帮助,但对于只有800行数据的情况,当然不是。欠采样会使您丢失太多有价值的数据,而过采样则会导致结果不可靠。更好的解决方案是扩充您的数据。

Snorkel之类的库,您可以通过概率性地替换或替换形容词,动词,名词等的同义词来扩充文本数据,从而大大增加数据量。我强烈建议您看一下它,因为它在学术界和行业中都经常使用。

关于平衡数据集的问题,有一些因素会影响结果。示例包括数据集的大小和过度拟合,特征在分类样本时的独特性,异常值的存在等。仅仅因为您有1万例癌症患者的样本和5万例健康人,并不一定意味着您的预测将是真实数据集上的比例为2:1。这是因为模型不一定要记住每个类的分布,而是功能如何预测类。

因此,在您的示例中,如果每个类都有通常将一个类与另一个类区分开的独特词,那么您希望在其他类中提供带有这些词的样本,以确保您不会在这些词上过度拟合每个类。

希望这会有所帮助!

,

从不平衡训练集中进行训练时,分类器参数的方差会变大。您先前的课程分配(A,B,C)越歪斜,这个问题就越大。

在可能的情况下,建议您从平衡的训练集中进行训练(相同数量的“ A”,“ B”和“ C”情况)。 实际的先前课程分配 可以在之后进行更正,请参见correction formula for posterior probabilities

您必须从完整的数据集中随机选择不同类别的病例子集。这样可以避免选择偏见。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。