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

HAO*_*HEN 8 python classification scikit-learn naivebayes

做天真的贝叶斯分类时,有没有人知道如何设置alpha的参数?

例如,我首先使用词袋来构建特征矩阵,矩阵的每个单元都是单词的计数,然后我用tf(术语频率)对矩阵进行归一化.

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

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

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

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

谢谢.

jak*_*vdp 9

在Multinomial Naive Bayes中,alpha参数是所谓的超参数 ; 即一个控制模型本身形式的参数.在大多数情况下,确定超参数最佳值的最佳方法是通过对可能的参数值进行网格搜索,使用交叉验证来评估模型在每个值上的数据性能.阅读以上链接,了解如何使用scikit-learn执行此操作的详细信息.


Gop*_*nas 5

为什么使用阿尔法?

为了对 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 时应进行与上述相同的操作。

对于朴素贝叶斯公式,请参阅此(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
Run Code Online (Sandbox Code Playgroud)

因此,为了解决这个问题,我们进行拉普拉斯平滑。我们将 alpha 添加到分子和分母字段中。

     = 0 + alpha / Number of training point where Y=1 + (Number of class labels in classifier * alpha)
Run Code Online (Sandbox Code Playgroud)
  1. 它发生在现实世界中,有些单词出现的次数很少,有些单词出现的次数较多,或者以不同的方式思考,在上面的公式 (P(W |Y=1) = P(W,Y=1)/P(Y=1) ) 中,如果分子和分母字段是小意味着容易受到异常值或噪声的影响。在这里,阿尔法也有帮助,因为随着阿尔法的增加,它使我的似然概率趋于均匀分布。

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