class_weight = 'balanced' 相当于朴素贝叶斯

class_weight = 'balanced' equivalent for naive bayes

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

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

我知道,我可以从较大的 class 中随机抽取样本,以便最终得到两个 class 大小相同的样本,但随后数据丢失了。

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

Logistic 回归是一个线性模型,即它通过您的数据绘制一条直线,数据的 class 由它位于直线的哪一侧决定。这条线只是你的特征的线性组合(加权和),所以我们可以通过调整权重来调整不平衡的数据。

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

您可以尝试过采样,而不是欠采样 - 使用重复数据或稍微调整的数据扩展较小的 class 或根据您的问题域研究其他方法(因为您正在处理文本 class化,these answers 有一些建议的方法)。

我写这篇文章的一部分是为了回应这里的其他答案。

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

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

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

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

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