Pyspark 中朴素贝叶斯分类器的阈值是啥?

Posted

技术标签:

【中文标题】Pyspark 中朴素贝叶斯分类器的阈值是啥?【英文标题】:What to pass as threshold for Naive Bayes Classifier in Pyspark?Pyspark 中朴素贝叶斯分类器的阈值是什么? 【发布时间】:2021-08-24 02:59:45 【问题描述】:

我正在尝试使用朴素贝叶斯分类器为我的模型制作 ROC 曲线。为此,我需要更改分类器的阈值。我解释它的方式是,必须传递一个列表,其中包含每个类别的阈值。因此,如果我有两个类别,并且 t 是我要设置的阈值 (0

无论如何,当我尝试做 ROC 曲线时,我得到了这个:

鉴于结果,我的想法是我对theshold的想法可能是错误的,所以我去检查了documentation for the Naive Bayes Classifier。但是当我终于找到一个例子时,我不明白参数的标准是什么:

nb = nb.setThresholds([0.01, 10.00])

有谁知道必须通过什么阈值?假设我希望阈值设置为 0.7(如果概率超过 0.7,我希望预测为 1),我应该将什么传递给阈值参数?

【问题讨论】:

我不明白你的问题。 ROC 曲线显示所有阈值。你不想自己设置它们。实际上你的 ROC 曲线看起来还不错。 @Calimo 我知道 roc 曲线显示了所有阈值。问题在于传递给 Pyspark 的 NaiveBayes 分类器的参数是什么。在其他方面,您认为这是可以接受的 ROC 曲线吗?在我看来,这些点(除了第一个和最后一个)看起来像一条直线,我并没有真正得到我应该得到的曲线。 那么您的问题是关于 ROC 曲线还是关于 setThresholds?每个帖子只问一个明确的问题。 meta.stackexchange.com/a/39224/147320 【参考方案1】:

正如pyspark.mlNaiveBayes 文档中thresholds 参数下所说:

预测p/t最大的类,其中p是原始的 该类的概率,t 是该类的阈值。

因此,阈值可以被认为是概率的障碍。为简单起见,在二进制分类的情况下,您可以将阈值设置为[0, 1] 范围内的值,这样它们的总和为1。这将为您提供所需的规则“如果概率超过阈值 T,则分类为 True,否则分类为 False”。

对于您对 0.7 概率阈值的具体要求,如下所示:

nb = nb.setThresholds([0.3, 0.7])

假设第一个条目是False 的阈值,第二个值是True 的阈值。使用这些阈值,模型将通过从[p_false/0.3, p_true/0.7] 中取出更大的值来分类具有FalseTrue 概率p_falsep_true 的类。

您可以在技术上将阈值设置为任何值。请记住,类别 X 的概率将除以其各自的阈值,并与其他类别的其他调整后的概率进行比较。

【讨论】:

以上是关于Pyspark 中朴素贝叶斯分类器的阈值是啥?的主要内容,如果未能解决你的问题,请参考以下文章

获取特征重要性 PySpark 朴素贝叶斯分类器

如何生成混淆矩阵并找到朴素贝叶斯分类器的错误分类率?

朴素贝叶斯分类器的准确性?

基于朴素贝叶斯分类器的情感分析

贝叶斯分类器(3)朴素贝叶斯分类器

如何更改 NLTK 中朴素贝叶斯分类器的平滑方法?