朴素贝叶斯 - ZhouXuyan/notes GitHub Wiki

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。

贝叶斯决策理论的核心思想,即选择具有最高概率的决策。

我们假设特征之间相互独立。所谓独立(independence)指的是统计意义上的独立,即一个特征或者单词出现的可能性与它和其他单词相邻没有关系。这个假设正是朴素贝叶斯分类器中 朴素(naive) 一词的含义。朴素贝叶斯分类器中的另一个假设是,每个特征同等重要。

朴素贝叶斯分类器通常有两种实现方式: 一种基于伯努利模型实现,一种基于多项式模型实现。这里采用前一种实现方式。该实现方式中并不考虑词在文档中出现的次数,只考虑出不出现,因此在这个意义上相当于假设词是等权重的。

朴素贝叶斯 工作原理

  提取所有文档中的词条并进行去重

  获取文档的所有类别

  计算每个类别中的文档数目

  对每篇训练文档: 

      对每个类别: 

          如果词条出现在文档中-->增加该词条的计数值(for循环或者矩阵相加)

          增加所有词条的计数值(此类别下词条总数)
  对每个类别: 

      对每个词条: 

          将该词条的数目除以总词条数目得到的条件概率(P(词条|类别))

  返回该文档属于每个类别的条件概率(P(类别|文档的所有词条))

朴素贝叶斯 开发流程

  收集数据: 可以使用任何方法。
  准备数据: 需要数值型或者布尔型数据。
  分析数据: 有大量特征时,绘制特征作用不大,此时使用直方图效果更好。
  训练算法: 计算不同的独立特征的条件概率。
  测试算法: 计算错误率。
  使用算法: 一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。

朴素贝叶斯 算法特点

  优点: 在数据较少的情况下仍然有效,可以处理多类别问题。
  缺点: 对于输入数据的准备方式较为敏感。
  适用数据类型: 标称型数据。

数学原理

首先给出贝叶斯公式:

在这个算法中:

NOTE:

  1. B是由b1 b2 ... bn组成的特征集,P(bn|An)和P(An)可以简单求得,P(B)为常数分母,这样就可以比较各个概率的大小了。
  2. 容易数值过小,且其中一个为零就会直接导致积为零。
  • 针对第一个问题,可以取自然对数:以避免下溢出的问题。

  • 操作时针对第二个问题,可以设分子初始值为1,分母初始值为2。

根据朴素贝叶斯算法实现的垃圾邮件分类实现:

https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/4.NaiveBayes/bayes.py