【问题标题】:class_weight = 'balanced' equivalent for naive bayesclass_weight = 'balanced' 等价于朴素贝叶斯
【发布时间】:2021-05-22 14:56:47
【问题描述】:

我正在使用两个不同的分类器对相同的不平衡数据执行一些(二进制)文本分类。我想比较两个分类器的结果。

在使用 sklearns 逻辑回归时,我可以选择为 sklearn 朴素贝叶斯设置 class_weight = 'balanced',没有这样的参数可用。

我知道,我可以从较大的类中随机抽样,以使两个类的大小相同,但随后数据丢失。

为什么朴素贝叶斯没有这样的参数?我想这与算法的性质有关,但找不到关于这个具体问题的任何信息。我也想知道等价物是什么?如何达到类似的效果(分类器意识到不平衡的数据,并给予少数类更多的权重,而对多数类给予更少的权重)?

【问题讨论】:

  • 哦,对不起,完成了:)

标签: python scikit-learn logistic-regression naivebayes


【解决方案1】:

我写这个部分是为了回应这里的另一个答案。

逻辑回归和朴素贝叶斯都是产生线性决策边界的线性模型。

逻辑回归是朴素贝叶斯(一种生成模型)的判别对应物。您根据 p(label | data) 对每个模型进行解码以找到最佳标签。朴素贝叶斯的不同之处在于它通过贝叶斯规则做到这一点:p(label | data) ∝ p(data | label) * p(label)。

(根据朴素贝叶斯假设,另一个答案是正确的说朴素贝叶斯特征彼此独立(给定类)。对于共线特征,这有时会导致朴素贝叶斯的概率估计错误——尽管分类还是挺不错的。)

这里的因素是朴素贝叶斯如何很好地处理类不平衡:它为每个类保留单独的书籍。每个(特征、标签)对都有一个参数。这意味着超普通类不能搞乱超稀有类,反之亦然。

不平衡可能渗透到一个地方:p(labels) 分布。它将与您的训练集中的经验分布相匹配:如果它是 90% 的标签 A,那么 p(A) 将为 0.9。 如果您认为标签的训练分布不能代表测试分布,您可以手动更改 p(labels) 值以匹配您对标签 A 或标签 B 等在野外出现的频率的先前信念.

【讨论】:

  • 感谢您的回答。我不明白的一件事是“它如何为每个班级保留单独的书籍”。请你再解释一下好吗?
  • 好问题!朴素贝叶斯对每个 (feature, label) 对都有单独的参数来建模 p(feature | label)。因此,如果可能的标签是 J、K 和 L,则有 p(feature1 | J)、p(feature1 | K) 和 p(feature1 | L) 的参数。
  • 非常感谢 - 我完全忘记了朴素贝叶斯是一个线性分类器(出于某种原因,我认为决策边界是二次的)。
  • 别担心!我知道这种感觉。 :D
  • 谢谢你,@AryaMcCarthy,这条评论真的帮助了我
【解决方案2】:

Logistic 回归是一种线性模型,即它通过您的数据绘制一条直线,并且数据的类别取决于它位于直线的哪一侧。这条线只是您的特征的线性组合(加权和),因此我们可以通过调整权重来调整不平衡数据。

另一方面,朴素贝叶斯通过计算给定单个特征的标签的条件概率来工作,然后使用朴素贝叶斯假设(特征是独立的)来计算具有特定标签的数据的概率(通过乘以条件每个特征和缩放的概率)。没有明显的参数可以调整以解决不平衡的类。

您可以尝试过采样,而不是欠采样 - 使用重复数据或稍微调整的数据扩展较小的类,或者根据您的问题领域寻找其他方法(因为您正在进行文本分类,these answers 有一些建议的方法)。

【讨论】:

  • 感谢您的回答,尤其是欠采样和过采样这两个术语!我不知道它有名字:) 现在我可以得到更多关于它的信息
猜你喜欢
  • 2012-02-21
  • 2011-12-28
  • 2015-05-22
  • 2013-09-09
  • 2015-01-03
  • 2017-02-09
  • 2018-02-14
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多