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.ml
的NaiveBayes
文档中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]
中取出更大的值来分类具有False
和True
概率p_false
和p_true
的类。
您可以在技术上将阈值设置为任何值。请记住,类别 X 的概率将除以其各自的阈值,并与其他类别的其他调整后的概率进行比较。
【讨论】:
以上是关于Pyspark 中朴素贝叶斯分类器的阈值是啥?的主要内容,如果未能解决你的问题,请参考以下文章