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作为特征矩阵.
谢谢.
为什么使用阿尔法?
为了对 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)
|Y=1) = P(W,Y=1)/P(Y=1) ) 中,如果分子和分母字段是小意味着容易受到异常值或噪声的影响。在这里,阿尔法也有帮助,因为随着阿尔法的增加,它使我的似然概率趋于均匀分布。所以 alpha 是超参数,你必须使用网格搜索(如 jakevdp 提到的)或随机搜索等技术来调整它。(https://towardsdatascience.com/hyperparameter-tuning-c5619e7e6624)
| 归档时间: |
|
| 查看次数: |
12697 次 |
| 最近记录: |