返回信息流俺不是大牛啊,只能写写这种浅显的文章了,算是抛砖引玉吧
naive bayes(朴素贝叶斯,下面简称NB ^_^)是ML中的一个非常基础和简单的算法,常常用它来做分类,我用它做过text classification。现在的研究中大概已经很少有人用它来实验了(除非是做base line),但确实是个很好的入门的算法,来帮助自己更加深刻的理解ML的本质。
首先从bayes公式开头吧
P(C/W) = P(C) * P(W/C) / P(W)
这个公式是ML中最基本也是最常用到的公式,怎么强调它的重要性都不过分。为了更容易理解这个公式,我将bayes公式放在文本分类问题中进行解释。
公式的左边,C代表的是文本的类别(例如是体育或者娱乐),W往往是一个测试样本(例如某一篇新闻),P(C/W)代表的是这个样本归属于该类别的概率,我们实际中的任务常常就是要得到样本归属各个类别的概率值P(C1/W),P(C2/W)...P(CN/W),然后最大概率值所对应的类别Ci就是该样本被分配的类。
计算这个概率值的方法就是bayes公式的右边。
P(C)表示C这个类别在所有文本中的概率,是先验概率。 实际中,这个值往往通过训练语料计算得到,例如,将训练语料中所有的体育文本数除以训练语料总的文本数,就是体育这个类别的先验概率。
P(W)则是通过这个公式计算:
P(W) = ∑P(W/Ci) * P(Ci)
可以看出,P(W)的计算可以通过 P(C)和P(W/C)得到。
P(W/C)的计算下面将重点介绍。
/* 注意,到此为止所介绍的东西都仅仅是bayes公式和bayes决策,和NB是两回事。下面要介绍到的东西才和NB有关。 */
现在的问题是怎样计算P(W/C)。在现实中,W这个样本往往是用向量表示的,包括了很多的分量 W = (w1, w2, w3, ... wn), 所以 P(W/C) = P(w1, w2, w3, ... wn / C),NB的核心在于它假设向量的所有分量之间是独立的。
Wi is independent of Wj, if i != j
对!这个假设就是NB的全部内容了,是不是很简单。有了这个假设,P(W/C)的计算就变为:
P(W/C) = ∏ P(wi / C)
有人可能会问,那么 P(Wi / C)怎么求呢。以文本分类为例,将文本作为一个向量,那么它的分量就是一个词在这个文本中是否存在。例如:
Wi = 1 if "乔丹" 在文本中出现
0 otherwise
对于这个Wi,它的P(Wi / C体育) 就是统计所有的体育文章中有多少篇出现了“乔丹”这个词,然后用 出现篇章数 / 所有体育篇章数 就是我们要的概率值了。
好了,终于写完了,回过头看,其实NB很简单,就是在bayes公式的基础上多了一个独立性假设,很好理解的。至于它的性能,各有各的说法,我认为很多时候你对于特征的提取和算法参数的设置更重要于算法本身,当然,that is another open question。
至于相关的文献,大家还是自己上网搜吧,实在是太多了。
随手写的,欢迎补充指正[em12]
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #2504同步于 2008/6/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
【扫盲贴】naive bayes算法
hunterlee
2008/6/30镜像同步20 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
肯定没你那活跃了,毕竟是企业,商业应用才是目标,在这里一个好的商业应用的idea要比一个好的算法有价值得多,要做学术还是得在学校。
【 在 cryppie 的大作中提到: 】
: 怒赞,在研究员果然NB。
: 开了个好头。
: 你们那里气氛很活跃?
这话可能不对。一般来说比较公认的,单一的算法性能最好的应该是SVM,NB只是一个最基础的算法。
【 在 sunmoonstar 的大作中提到: 】
: 谢大师!
: 综合来看,nb是文本分类最优秀的算法
SVM需要计算量太大。
而在文本分类里,NB加几个优化,能够接近SVM的分类效果。
【 在 hunterlee 的大作中提到: 】
: 这话可能不对。一般来说比较公认的,单一的算法性能最好的应该是SVM,NB只是一个最基础的算法。
【 在 sunmoonstar 的大作中提到: 】
: SVM需要计算量太大。
: 而在文本分类里,NB加几个优化,能够接近SVM的分类效果。
我觉得很多时候,算法的分类效果不如一个有用的特征那么明显