machine learning in action 中讲解

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

数学知识

条件概率 $P(A|B)=\frac{P(A,B)}{P(B)}$

贝叶斯准则 $P(C|x)=\frac{P(x|c)*P©}{P(x)}$

贝叶斯决策理论

  1. 如果p1(x,y)>p2(x,y),则属于类别1
  2. 如果p2(x,y)>p1(x,y),则属于类别2

贝叶斯分类准则

  1. 如果p(c1|x,y)>p(c2|x,y),则属于类别1
  2. 如果p(c2|x,y)>p(c1|x,y),则属于类别2

朴素贝叶斯的一般过程

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

朴素贝叶斯的假设

  1. 特征独立
  2. 每个特征同等重要

朴素贝叶斯的两种普遍实现方式

  1. 基于贝努力模型实现
  2. 基于多项式模型实现

使用朴素贝叶斯进行文本分类

  1. 准备数据:从文本中构建词向量
    • 处理文本数据,将每个doc的文本处理成一个list,生成一个包含多个list的list,同时将每个doc的所属类别记录在一个list里。这里就两个类别。
    • 建立单词库,将上面的文本list里的单词合并,生成一个单词集合
    • 根据这个单词集合,可以为每一个doc生成一个跟单词集合一样长的单词列表,即若doc中有这个单词,则相应单词集合位置上置1,否则为0
  2. 从词向量计算概率
    • 计算docs中类别1的概率。使用所属类别的和除以docs的总数
    • 计算两个类别的单词总数,以及每个单词在两个类别里的各自总数
    • 计算每个单词在两个类别里出现概率,用各自总数除以类别单词总数
  3. 测试算法:根据现实情况修改分类器
    • 计算要分类的vec的单词向量与单词概率表的乘积
  4. 准备数据:bag-of-words model
    • 在set-of-words model中,一个词只按出现与否处理,在bag-of-words model中,一个词可以多次出现
  5. 示例:过滤垃圾邮件
    • 获取一定数量邮件的内容并存成文件,同时分好类
    • 将文件内容变成词向量
    • 随机选择部分保留下来作为测试集,其余做训练集
    • 从训练集计算分类的概率向量
    • 用测试集测试,并计算错误率
    • 多次测试取平均

eleanor’s notes

  1. 上面整个文本分类可以这样理解
    • 希望通过已有的文本分类决定未知分类的文本类型,那么数学上P(c1|w)的含义就是在当前单词的前提下,属于类别1的概率。此时p(w)=1,贝叶斯准则退化成P(c1|w)=P(w|c1)P(c1)
    • 通过构建已知分类的文本的所有单词的词向量,计算每个单词在不同类别下的比重,获取p(wi|c0) p(wi|c1)
    • 由于贝叶斯分类的前提是特征独立,那么p(w|ci)=p(w1|ci)…*p(wn|ci)
    • 由于最后实现时采用了log,因此P(w|ci)*P(ci)变成了加法。这一点书中并没有这样解释,甚至在没采用log时程序就已经加了P(ci),或许是错误的。
    • 根据上述分析,因此最终有logP(ci|w)=sum(log(p(wj|ci)))+log(p(ci))