【十九】机器学习之路——朴素贝叶斯分类

来源:互联网 发布:java log日志打印 编辑:程序博客网 时间:2024/05/22 10:42

  最近在看周志华《机器学习》的贝叶斯分类器这一章时觉得书上讲的很难理解,很多专业术语和符号搞的我头大,大学时候概率论我还是学的还是不错的,无奈网上搜了搜前辈的博客,看到一篇把朴素贝叶斯讲的很简单的文章,顿时豁然开朗。关于贝叶斯分类且听我慢慢道来:

贝叶斯定理

  学习朴素贝叶斯分类器之前,先介绍下贝叶斯定理(来自百度):

  贝叶斯定理由英国数学家贝叶斯 ( Thomas Bayes 1702-1761 ) 发展,用来描述两个条件概率之间的关系,比如 P(A|B) 和 P(B|A)。按照乘法法则,可以立刻导出:P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B)。如上公式也可变形为:P(B|A) = P(A|B)*P(B) / P(A)。

  上图可以很好的说明了贝叶斯的公式,P(A|B)就是在B事件已经发生的基础上,发生A的概率。同理,P(B|A)就是在A事件已经发生的基础上,发生B的概率。网上看到过一个很简单的贝叶斯概率的例子:

  例如:一座别墅在过去的 20 年里一共发生过 2 次被盗,别墅的主人有一条狗,狗平均每周晚上叫 3 次,在盗贼入侵时狗叫的概率被估计为 0.9,问题是:在狗叫的时候发生入侵的概率是多少?

  我们假设 A 事件为狗在晚上叫,B 为盗贼入侵,则以天为单位统计,P(A) = 3/7,P(B) = 2/(20*365) = 2/7300,P(A|B) = 0.9,按照公式很容易得出结果:P(B|A) = 0.9*(2/7300) / (3/7) = 0.00058

上述例子中:

  • P(A)是A的先验概率或边缘概率。之所以称为”先验”是因为它不考虑任何B方面的因素。
  • P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。
  • P(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。
  • P(B)是B的先验概率或边缘概率,也作标准化常量(normalized constant)。

总结:

  看完了以上的介绍,各位同学心里大概有点数了吧,其实贝叶斯分类器就是通过条件概率来进行分类的。举一个简单的例子,我们听到一段非常非常嗲的女生的声音,让你判断是A.志玲姐姐; B.门口吆喝卖大葱的大妈; C.女汉子同学;毫无疑问,我们都会选择A,因为我们知道志玲姐姐说话的声音很嗲,在这几个选项当中可能性最大。当然,有的同学就会说我那个女汉子同学平时私下说话超级超级嗲的,但是在没有这些可用信息的时候,我们选择志玲姐姐是概率最大的选项,这其实就是贝叶斯分类器的思想基础。

朴素贝叶斯分类器

  关于朴素贝叶斯分类器的内容,推荐大家参考前辈阮一峰的博客——朴素贝叶斯分类器的应用,讲的浅显易懂,非常适合广大刚入门机器学习的小伙伴。
  另外算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
这篇博客介绍贝叶斯分类器内容较丰富一点,而且不难懂。相信大家看完这两篇博客就能够完全搞懂贝叶斯分类。简单总结一下朴素贝叶斯里三个重要的点:

主要原理

  朴素贝叶斯分类的基本原理就是贝叶斯定理,简单来说我们现在手头有个需要分类的数据。这个数据的特征属性值为x1=(a1,a2,...,am),假设它有m个特征值,类别只有A类和B类两种类别。想要根据x1的特征值来判断它属于哪个类别的概率最高,从概率的角度来进行分类。

  1. 需要计算P(A|x1)P(B|x1),并进行大小比较确定分类结果。
  2. 根据贝叶斯定理,计算两种分类的条件概率:
    P(A|x1)=P(A|a1,a2,...,am)=P(a1,a2,...,am|A)P(A)P(a1,a2,...,am)=P(a1|A)P(a2|A)...P(am|A)P(A)P(a1)P(a2)...P(am)

    P(B|x1)=P(B|a1,a2,...,am)=P(a1,a2,...,am|B)P(B)P(a1,a2,...,am)=P(a1|B)P(a2|B)...P(am|B)P(B)P(a1)P(a2)...P(am)
  3. 根据计算结果,给出概率最大的分类结果。

特征属性为连续值的处理

  在利用朴素贝叶斯进行分类时,需要计算各个划分的条件概率P(a1,a2,...,am|A),一般如果特征属性取值为离散值,我们根据训练集就可以轻松算出概率。但是,如果特征属性取值为连续值的话就很难根据样本数来求出概率。这个时候我们通常假定连续值服从高斯分布:


只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,代入上述公式即可得到需要的估计值。

条件概率P(a|A)=0的处理

  当某个类别下某个特征项划分没有出现过一次时,就会导致P(ai|A)=0,0乘上其他的数结果为0。这就导致我们求得的条件概率结果不准确。为了解决这个问题,我们引入”拉普拉斯修正”,具体思路如下图所示:

其中|D|所有分类的样本总数,|DC|表示分类为C的样本总数。


  朴素贝叶斯分类的理论部分算是讲完了,时间不早了,下期说一说朴素贝叶斯的实战,主要在什么项目中会用到贝叶斯分类,以及代码实现。再见~

阅读全文
0 0
原创粉丝点击