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

标签 python scikit-learn logistic-regression naivebayes

我正在使用两个不同的分类器对相同的不平衡数据执行一些(二进制)文本分类。我想比较两个分类器的结果。
使用 sklearns 逻辑回归时,我可以选择设置 class_weight = 'balanced'对于 sklearn 朴素贝叶斯,没有这样的参数可用。
我知道,我可以从较大的类中随机采样,以便最终使两个类的大小相同,但是数据丢失了。
为什么朴素贝叶斯没有这样的参数?我想这与算法的性质有关,但无法找到有关此特定问题的任何信息。我也想知道等价物是什么?如何实现类似的效果(分类器意识到不平衡的数据,并给予少数类更多的权重,而给予多数类更少的权重)?

最佳答案

我写这个部分是为了回应这里的另一个答案。
逻辑回归和朴素贝叶斯都是产生线性决策边界的线性模型。
逻辑回归是朴素贝叶斯(生成模型)的判别对应物。您解码每个模型以根据 p(label | data) 找到最佳标签。朴素贝叶斯的不同之处在于它通过贝叶斯规则做到这一点:p(label | data) ∝ p(data | label) * p(label)。
(另一个答案是正确的,根据朴素贝叶斯假设,朴素贝叶斯特征彼此独立(给定类别)。对于共线特征,这有时会导致朴素贝叶斯的概率估计错误——尽管分类是还是很不错的。)
这里的分解是朴素贝叶斯如何很好地处理类不平衡:它为每个类保留单独的书籍。每个(特征,标签)对都有一个参数。这意味着超普通类不能搞乱超稀有类,反之亦然。
不平衡可能会渗透到一个地方:p(labels) 分布。它将匹配您训练集中的经验分布:如果它是 90% 的标签 A,那么 p(A) 将为 0.9。
如果您认为标签的训练分布不能代表测试分布,您可以手动更改 p(labels) 值以匹配您对标签 A 或标签 B 等出现频率的先验信念.

关于python - class_weight = 'balanced' 相当于朴素贝叶斯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66280588/

相关文章:

scala - LogisticRegressionModel 手动预测

scikit-learn - 如何使用 sklearn LogisticRegression 启用多核处理?

python - 如何从 Windows 上的线程内部更改 python 线程名称?

python - Cython lapack 不会覆盖参数

python match 只捕获第一组和最后一组——我是不是误会了什么?

python - 为什么在 sklearn GridsearchCV SVM 中使用 class_weight 时会出现错误?

python - 在 Windows 上安装 scipy 的问题

python - multiprocessing.Pool 挂起如果 child 导致段错误

python - 类型错误 : Input 'y' of 'Mul' Op has type float32 that does not match type float64 of argument 'x'

c++ - 用于图像故障检测的逻辑回归