多项式朴素贝叶斯参数α设置?scikit学习

2024-05-23 19:56:57 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道在进行朴素贝叶斯分类时如何设置alpha参数吗?

例如,首先用一袋词建立特征矩阵,矩阵中的每个单元都是词的个数,然后用tf(term frequency)对矩阵进行归一化。

但是当我使用朴素贝叶斯建立分类器模型时,我选择使用多项式N.B(我认为这是正确的,而不是伯努利和高斯)。默认的alpha设置是1.0(文档中说是Laplace平滑,我不知道是什么)。

结果真的很糟糕,像只有21%的人回忆起找到的积极类(目标类)。但是当我设置alpha=0.0001(我随机选择)时,结果得到95%的回忆分数。

此外,我检查了多项式N.Bformula,我认为这是因为alpha问题,因为如果我使用单词计数作为特征,alpha=1不会影响结果,但是,由于tf在0-1之间,alpha=1确实会影响这个公式的结果。

我也测试了结果不使用tf,只使用了数袋字,结果也是95%,那么,有人知道如何设置α值吗?因为我必须使用tf作为特征矩阵。

谢谢。


Tags: 文档模型alpha目标参数分类器tf分类
2条回答

为什么使用alpha?

用于对NB p(Y=1 | W)或p(Y=0 | W)中的查询点进行分类(考虑二进制分类) 这里W是单词的向量W=[w1,w2,w3。。。。wd[文字] d=特征数量

所以,在训练时找出所有这些的概率
P(w1 | Y=1)*P(w2 | Y=1)*…..P(wd | Y=1))*P(Y=1)

对于Y=0,应执行上述操作。

对于Naive Bayes公式,请参阅(https://en.wikipedia.org/wiki/Naive_Bayes_classifier

现在在测试的时候,假设你遇到了一个不在火车上的单词,那么它在一个类中存在的概率为零,这会使整个概率为0,这是不好的。

考虑W*单词不在训练集中

p(W*| Y=1)=p(W*,Y=1)/p(Y=1)

      = Number of training points such that w* word present and Y=1 / Number of training point where Y=1
      = 0/Number of training point where Y=1

为了解决这个问题,我们做拉普拉斯平滑。 我们把α加到分子和分母域。

     = 0 + alpha / Number of training point where Y=1 + (Number of class labels in classifier * alpha)
  1. 它发生在现实世界中,在上述公式中(P(W|Y=1) = P(W,Y=1)/P(Y=1)),如果分子和分母字段很小,则很容易受到异常值或噪声的影响。这里alpha也有帮助,因为随着alpha的增加,我的可能性分布趋于均匀。

所以alpha是超参数的,你必须使用网格搜索(如jakevdp所述)或随机搜索等技术来调整它。(https://towardsdatascience.com/hyperparameter-tuning-c5619e7e6624

在多项式朴素Bayes中,alpha参数被称为hyperparameter;即控制模型本身形式的参数。在大多数情况下,确定超参数最佳值的最佳方法是通过对可能的参数值进行grid search运算,使用cross validation来评估模型在每个值上对数据的性能。阅读以上链接了解如何使用scikit learn进行此操作的详细信息。

相关问题 更多 >