在进行朴素贝叶斯分类时,有人知道如何设置alpha的参数吗?
例如我首先使用词袋来构建特征矩阵,矩阵的每个单元都是词数,然后使用tf(词频)对矩阵进行归一化。
但是当我使用朴素贝叶斯模型建立分类器模型时,我选择使用多项式N.B(我认为这是正确的,而不是Bernoulli和Gaussian)。默认Alpha设置为1.0(文档说这是Laplace平滑,我不知道是什么。)
结果是非常糟糕的,就像只有21%的人回想找到肯定类别(目标类别)一样。但是当我将alpha设置为0.0001(我随机选择)时,结果获得了95%的回忆率。
此外,我检查了多项式NB formula,我认为这是因为alpha问题,因为如果我将单词计数用作特征,则alpha = 1不会影响结果,但是,由于tf在0-1之间,则alpha = 1确实会影响此公式的结果。
我还测试了结果,不使用tf,仅使用了数袋单词,结果也是95%,所以,有人知道如何设置alpha值吗?因为我必须使用tf作为特征矩阵。
谢谢。
在多项式朴素贝叶斯中,alpha
参数是所谓的hyperparameter;即控制模型本身形式的参数。在大多数情况下,确定超参数最佳值的最佳方法是通过对可能的参数值使用grid search,并使用cross validation评估模型在每个值上对数据的性能。阅读以上链接,详细了解如何使用scikit-learn进行此操作。
在这里,我只补充为什么要使用alpha?
用于在NB P(Y = 1 | W)或P(Y = 0 | W)中对查询点进行分类(考虑二进制分类)这里W是单词W的向量W = [w1,w2,w3 .... wd]d =功能数量
因此,要找出所有这些在训练时的概率(https://en.wikipedia.org/wiki/Naive_Bayes_classifier)P(w1 | Y = 1)* P(w2 | Y = 1)* ..... P(wd | Y = 1))* P(Y = 1)
对于Y = 0,应执行相同的操作。
现在在测试时,请考虑您遇到的单词在训练集中不存在,然后它在一个类中的存在概率为零,这会使整个概率为0,这不是很好。
P(W |Y=1) = P(W
,Y = 1)/ P(Y = 1)=出现w'个单词且Y = 1的训练点数/ Y = 1的训练点数= 0 /训练点数,其中Y = 1
因此,为了摆脱这个问题,我们进行了拉普拉斯平滑处理。我们在分子和分母字段中添加alpha。
= 0 + alpha / Number of training point where Y=1 + (Number of class labels in classifier * alpha)
|Y=1) = P(W
,Y = 1)/ P(Y = 1))中,一些单词出现的时间很少,发生的次数更多,或者以不同的方式思考,如果分子和分母字段很小,很容易受到异常值或噪声的影响。在这里,alpha也会有所帮助,因为随着alpha的增加,我的可能性概率将移动到均匀分布。 所以alpha是超参数,您必须使用网格搜索(如jakevdp所述)或随机搜索等技术对其进行调整。 (https://towardsdatascience.com/hyperparameter-tuning-c5619e7e6624)