在进行朴素贝叶斯分类时,有谁知道如何设置alpha参数吗?
例如,我首先用一袋单词来构造特征矩阵,矩阵的每个单元格都是单词计数,然后用tf(词频)对矩阵进行规范化。
但是当我使用朴素贝叶斯建立分类器模型时,我选择使用多项式N.B (我认为这是正确的,而不是Bernoulli和bayes )。默认的alpha设置是1.0 (文档说是Laplace平滑,我不知道是什么)。
结果真的很糟糕,比如只有21%的回忆才能找到正类(目标类)。但是当我设定alpha = 0.0001时(我随机选择),结果是95%的回忆分数。
此外,我检查了多项式N.B 公式,我认为这是因为alpha问题,因为如果我使用单词计数作为特征,alpha =1并不会影响结果,但是,由于tf在0-1之间,alpha =1确实会影响这个公式的结果。
我还测试了不使用tf的测试结果,只使用了纸袋计数,结果也是95%,那么,有没有人知道如何设置alpha值呢?因为我得用tf作为特征矩阵。
谢谢。
发布于 2015-11-21 06:39:32
在多项式朴素贝叶斯中,alpha参数被称为https://en.wikipedia.org/wiki/Hyperparameter_optimization,即控制模型本身形式的参数。在大多数情况下,确定超参数最优值的最佳方法是通过网格搜索而不是可能的参数值,使用交叉验证在每个值上评估模型对数据的性能。阅读上面的链接,以了解如何使用scikit-学习的详细信息。
发布于 2019-11-27 11:10:07
为什么要用阿尔法?
对于在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,也应该这样做。
对于朴素的Bayes公式,请参考以下内容(分类器)
现在,在测试的时候,考虑到你遇到的单词在火车集合中不存在,那么它在一个类中存在的概率是零,这将使整个概率0,这是不好的。
考虑W* word在训练集中不存在
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为了解决这个问题,我们做了Laplace平滑。我们将α添加到分子和分母字段中。
= 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)
发布于 2022-06-03 06:05:59
最好使用Gridsearchcv或RandomSearchcv(在低规范模型上使用此方法)来自动化您的超参数,在MultinomialNB情况下为alpha。
就像这样:
model=MultinomialNB()
param={'alpha': [0.00001, 0.0001, 0.001, 0.1, 1, 10, 100,1000]}
clf=GridSearchCV(model,param,scoring='roc_auc',cv=10,return_train_score=True) https://stackoverflow.com/questions/33830959
复制相似问题