关于用贝叶斯方法判断性别的教程中Laplace平滑问题

  板凳区 Sofa竞赛3    浏览次数:3371        分享
1

根据名字判断性别有一个朴素贝叶斯教程(http://sofasofa.io/tutorials/naive_bayes_classifier/),但是关于其中Laplace平滑我有一个疑问。


教程作者首先统计了两个性别中,每个字出现的概率。由于最后计算后验概率时需要有公共的部分,因此作者又计算了该公共部分,即如下代码:

base_f = math.log(1 - train['gender'].mean())
base_f += sum([math.log(1 - frequency_list_f[char]) for char in frequency_list_m])

base_m = math.log(train['gender'].mean())
base_m += sum([math.log(1 - frequency_list_m[char]) for char in frequency_list_m])

为了避免新名字中某些字出现的概率变为0,采用了Laplace平滑。即在测试集中,在计算每个字的概率时使用了Laplace平滑。但是在计算base_f和base_m时,作者却并没有用到Laplace平滑。


我认为Laplace平滑应该在计算base_f和base_m时也应该用吧?

 

CharlieGuo   2018-04-12 15:55



   1个回答 
0

不需要吧,教程里的平滑是对词频进行平滑,而base_f和base_m就是训练集中男女的性别比重,不涉及到词频


SofaSofa数据科学社区DS面试题库 DS面经

kidd23   2018-04-12 22:04

你这么说也有道理。确实,在base_f和base_m中,计算的是训练集中的比例,因此不会出现某个字概率为0的情况,不会对取log造成影响。不过在李航的《统计学习方法》中,利用贝叶斯估计的例题中(例4.2),在计算训练集中的条件概率时,也用到了Laplace平滑。这个问题可能还需要探讨吧 - CharlieGuo   2018-04-18 16:17


  相关讨论

姓名辨别男女如何做到准确率90%?

'str' object has no attribute 'decode' 代码运行时有错误呢?请高手帮忙解决

请大佬分享

利用朴素贝叶斯对名字进行性别预测

大家跑模型都用的什么牌子的笔记本

求教一下:怎么进阶

有人关注机器学习在量化交易中的应用吗?

有偿!!如何写一个restful api

如何评价大数据的未来?

有没有赚外快的方法啊

  随便看看

怎么利用permutation importance来解释xgboost模型的特征?

laplace光滑什么意思

为什么过拟合不好?

pandas报错ValueError: Cannot convert non-finite values (NA or inf) to integer

决策树、随机森林中的多重共线性问题