前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[机器学习实战札记] 朴素贝叶斯

[机器学习实战札记] 朴素贝叶斯

作者头像
云水木石
发布2019-07-01 14:43:33
6300
发布2019-07-01 14:43:33
举报

《概率论》(当年我学习的课程为《概率论与数理统计》,涵盖了概率论与统计学)应该是每个理工科大学生都要学习的课程,不知道有多少同学和我一样,学得一头雾水。悲催的是,考研的时候又学习了一遍,依然不着门路,靠死记硬背过关。好在后面的学习和工作生涯中,再没有和它打过照面,直到最近开始接触机器学习。

《机器学习实战》第4章,开始介绍基于概率论的分类方法。其实《机器学习》这本书对贝叶斯决策论有比较详细的介绍,不过涉及到比较多的数学公式,比较难懂。而本书对程序员比较友好,只涉及很少的数学知识,更多的是通过程序来阐述这一算法。

条件概率

书中举了一个例子来阐述条件概率的概念。7块石头,3块是灰色的,4块是黑色的,放入两个桶A和B,A桶放4块石头(2块灰色,2块黑色),B桶放3块石头(1块灰色,2块灰色)。计算从B桶中取到灰色石头的概率的方法,就是所谓的条件概率。这里的已知条件是石头取自B桶且B桶有3块石头。用公式表示为:

P(gray | bucketB) = P(gray and bucketB) / P(bucketB)

这个公式看起来不起眼,但却开启了一门新的理论,即通过先验知识和逻辑推理来处理不确定命题。另一种概率解释称为频数概率,它只从数据本身获取结论,并不考虑逻辑推理及先验知识。

另一种有效计算条件概率的方法称为贝叶斯准则。贝叶斯准则告诉我们如何交换条件概率中的条件和结果,即如果已知P(x | c),要求P(c | x)。其公式为:

朴素贝叶斯

朴素贝叶斯有两个简单的假设:

  • 特征之间相互独立。所谓独立指的是统计意义上的独立,即一个特征出现的可能性与其它特征值无关。
  • 每个特征同等重要。

尽管上述假设存在一些小瑕疵,但朴素贝叶斯的实际效果很好。使用公式表示如下:

P(W0, W1, W2, ..., WN | c) = P(W0|c)*P(W1|c)*...*P(WN|c)
修正算法

利用贝叶斯分类器对文档进行分类时,要计算多个概率的乘积以获得文档属于某个类别的概率,即计算P(W0|1)P(W1|1)P(W2|1)。如果其中一个概率值为0,那么最后的乘积也为0。为降低这种影响,可以将所有词的出现数初始化为1,并将分母初始化为2。

另外还要处理下溢出问题,这是因为太多很小的数相乘,最后结果可能会四舍五入,得到0。解决的方法是利用代数中的公式:

ln(a*b) = ln(a) + ln(b)

通过求对数避免下溢出或者浮点数舍入导致的错误。采用自然对数进行处理不会有任何损失。

留存交叉验证(hold-out cross validation)

随机选择数据的一部分作为训练集,而剩余部分作为测试集的过程成为留存交叉验证。如果想更精确的估计分类器的错误率,可以进行多次迭代后求出平均错误率。


4.7章节的示例无法使用,原因在于代码中使用的RSS源已经不存在。我对这个示例做了修改,用来显示垃圾邮件中使用最多的词语。另外在这个示例中会去掉出现次数最高的30个词,如果将这个应用在垃圾邮件过滤,错误率反而会提高,但如果只是去掉10个最常用词,结果一致。

可见,即使采用同样的算法,我们还是可以采用不同的修正方法,进行微调,对最后的错误率有一些影响。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 条件概率
  • 朴素贝叶斯
  • 修正算法
  • 留存交叉验证(hold-out cross validation)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档