美文网首页贝叶斯
基于概率论的分类方法—朴素贝叶斯

基于概率论的分类方法—朴素贝叶斯

作者: PrivateEye_zzy | 来源:发表于2019-01-04 17:59 被阅读40次

    本章涉及到的知识点清单:

    1、条件概率

    2、贝叶斯定理

    3、目标概率映射

    4、目标概率映射的极大似然估计

    5、朴素定义—条件独立性假设

    6、分类逻辑

    7、优化分类器

    8、朴素贝叶斯分类器实战—英文评论留言分类

    9、文档切词—构造词条列表

    10、构造词汇表—定义特征值和特征向量

    11、python编程实战实现朴素贝叶斯分类器

    12、分类器结果展示和总结

    一、条件概率

    假设有下列两个事件A和B

    事件A:早上乘坐地铁却没有赶上8点钟的地铁

    事件B:上班迟到

    如果我们需要统计:在所有上班迟到的人之中,有多少人是因为早上没有赶上8点钟的地铁?那么可以用P(A|B)来表示这个概率结果—条件概率

    条件概率的定义:在事件B发生的条件下,量化事件A发生的概率

    同理,P(B|A)即表示:在所有没有赶上8点钟地铁的人之中,有多少人上班迟到了?

    由条件概率的定义,可以得到其计算方式为

    条件概率的计算

    其中,P(A\cap B)表示事件A和B共同发生的概率—联合概率

    P(B)表示事件B单独发生的概率—边缘概率

    二、贝叶斯定理

    我们写出两个条件概率:P(A\cap B)P(B\cap A)

    条件概率

    由于P(A\cap B) = P(B\cap A),则联立两个式子,得

    贝叶斯定理

    上式就是贝叶斯定理,它告诉我们如何交换条件概率中的条件与结果,即如果P(A|B)计算困难,那么可以先计算P(B|A)

    三、目标概率映射

    令X表示一个样本实例的特征向量,其是由一系列特征值构成的n维向量,即

    特征向量

    其中x1,x2等代表特征值,则X是一个n维特征向量,代表一个样本实例的量化结果

    令C表示所有样本的分类集合

    样本的分类集合

    一个样本属于一个类别,即一个特征向量Xi和一个具体的类别ck具有一组映射关系。而这组映射关系,可以用条件概率来这样描述

    P(c_{k}|X_{i}):表示任意一个n维特征向量X,属于类别ck的条件概率

    而根据贝叶斯定理

    学习目标

    通过观察,上式中Xi属于c1、c2或者ck的概率,分母都会存在Xi的边缘概率P(X_{i}),即Xi属于任何类别的概率和其边缘概率P(X_{i})无关,为此我们可以得到

    学习目标

    即我们要计算条件概率P(c_{k}|X_{i}),需要先从样本集合中学习到以下两个概率映射:

    (1)条件概率:P(X_{i}|c_{k})

    (2)边缘概率:P(c_{k})

    四、目标概率映射的极大似然估计

    接下来我们需要计算要学习的目标概率,可以用统计计数(极大似然估计)来计算这两个概率

    假设有M个样本(M个特征向量),则边缘概率P(c_{k})的极大似然估计为:

    边缘概率的极大似然估计

    即M个样本中,各个样本类别c=ck发生的次数,除以样本总数

    条件概率P(X_{i}|c_{k})的极大似然估计为:

    条件概率的极大似然估计

    即M个样本中,各个样本X=Xi且类别c=ck共同发生的次数,除以各个样本类别c=ck发生的次数

    五、朴素定义—条件独立性假设

    计算完P(X_{i}|c_{k})P(c_{k})这两个概率映射后,对于任意一个新样本的特征向量X,我们只需要将其带入P(X_{i}|c_{k})映射计算,最后用贝叶斯定理计算出P(c_{k}|X_{i}),不过这里会存在一个问题:

    我们将P(X_{i}|c_{k})的特征向量X展开为n个特征值表示

    特征向量X展开为n个特征值x

    假设每一个特征值都是二值化(binary),则X共有2*2*...2 = 2^{n}-1种可能的取值

    再假设类别集合C总共只有2个类别,那么P(X_{i}|c_{k})P(c_{k})总共就有2*(2^{n}-1)种可能性的组合

    即上述概率乘积面临“组合爆炸”的可能性非常大,为了降低参数可能的组合总数,就需要用到朴素贝叶斯假设

    朴素贝叶斯假设:也称条件独立性假设,指当在c=ck这个条件(事件)的情况下,不同特征值之间的取值互相独立

    即:

    朴素贝叶斯假设

    上述翻译为:在类别为ck的条件下,特征值x1取值的条件概率与其余特征值的取值无关

    六、分类逻辑

    应用朴素贝叶斯假设,我们将待分类的特征向量X带入P(X_{i}|c_{k})概率映射计算,得

    朴素贝叶斯假设

    可以看到,当xj和ck都是binary的时候,通过应用朴素贝叶斯假设,组合参数的个数由2*(2^{n}-1)减少到了2*n

    接下来用贝叶斯定理计算出待分类的特征向量X属于ck的条件概率,即

    特征向量X属于ck的条件概率

    最后统计出X属于分类集合C=c1|c2...|ck中条件概率最大的类别,就是X的分类结果,即

    X的分类结果

    至此,我们就利用贝叶斯定理和朴素贝叶斯假设,完成了朴素贝叶斯分类器

    七、优化分类器

    上述分类器存在2点需要优化的地方:

    (1)由于计算过程中存在连乘运算\prod_{j=1}^{n}P(x_{j}|c_{k}),则当某一个特征值xj的条件概率P(x_{j}|c_{k})为0时,会使得整个连乘运算\prod_{j=1}^{n}P(x_{j}|c_{k})的结果为0

    优化方法:将每个特征值xj的条件概率P(x_{j}|c_{k})初始化为1

    (2)还是由于连乘运算\prod_{j=1}^{n}P(x_{j}|c_{k})可能会使得一些列小数的乘积结果下溢出

    优化方法:可以利用对数的乘积运算转化为对数之和

    对数的乘积运算

    分别对P(X_{i}|c_{k})P(c_{k}|X_{i})取对数,即可防止计算结果下溢出

    八、朴素贝叶斯分类器实战—英文评论留言分类

    接下来我们分析一个实际的文本分类例子—在线社区的留言板

    为了不影响社区的正面发展,从产品的角度,希望社区可以自动屏蔽带有侮辱类(负面)的留言,让社区只保留非侮辱类(正面)的留言

    那么从技术的角度,利用监督式学习,我们希望从历史留言中选取部分样本来学习一个留言分类器,用来对新留言进行逻辑推理,判断新留言是否属于侮辱性类别的留言,这里我们采用朴素贝叶斯模型训练分类器

    则对此问题建立两个类别:侮辱类和非侮辱类,分别使用1和0来表示,为此,我们列出该场景下使用朴素贝叶斯训练分类器的步骤:

    (1)收集数据:获取留言和其分类结果

    (2)量化数据:将留言解析量化为词条向量(特征值的定义)

    (3)分析数据:检查词条向量确保量化的正确性

    (4)训练分类器:计算特征向量中不同特征值的条件概率

    (5)使用分类器:根据计算好的条件概率,通过朴素贝叶斯计算新留言属于每个类别的概率

    (6)测试算法:交叉验证分类器

    假设已经有了样本留言,则我们从量化数据开始一步步构造分类器

    九、文档切词—构造词条列表

    训练留言样本

    首先,我们对每个句子进行英文语法的切词,定义切词的规则如下:

    (1)以标准英文单词的空格语法来切分句子(使用正则表达式过滤标点符号)

    (2)统一所有单词为小写单词

    (3)切分的单词长度均大于3

    (4)切分单词没有出现在停词表中(排除冠词、量词、语气词等无用词)

    PS:根据不同场景,切词的规则可以很复杂

    用以上切词规则,我们将样本句子切分为下列词条列表

    词条列表

    十、构造词汇表—定义特征值和特征向量

    接下来我们整理词条列表中的每一个单词,排除重复出现的单词,构造出样本的词汇表

    词汇表

    可以看到去重后有14个单词组成词汇表,而这14个单词可以反映描述到所有句子中

    词汇表的意义为将句子翻译为特征值和特征向量(词条向量)

    (1)特征值的定义:词汇表中的单词依次是否出现在当前句子中,出现为1,没有出现为0

    (2)特征向量的定义:由所有特征值组成的词向量

    根据上述定义,我们用词汇表作为翻译标准,将词条列表翻译为下列词向量

    词向量

    至此,我们用这个14维的词向量来描述一个句子的所有特征—单词的分布和出现情况,即完成了句子到向量的量化过程

    PS:文本处理的特征值一般有两个模型

    (1)词集模型:单词在句子中是否出现

    (2)词袋模型:单词在句子中出现的总次数

    案例里我们使用了词集模型来定义特征值,接下来只要使用词向量来训练分类器即可

    十一、python编程实战实现朴素贝叶斯分类器

    句子切词规则 构造词汇表 构造词条向量 训练分类器 使用分类器

    十二、分类器结果展示和总结

    最后用训练好的分类器来测试新留言句子的分类结果为

    测试分类结果

    至此,我们可以总结出使用朴素贝叶斯作为分类器的几个特点

    (1)朴素贝叶斯是一个通用的分类器,通过监督学习可以处理文本分类、公司上市质量、股票质量等多分类问题

    (2)利用条件独立性假设,降低了对数据量组合的需求,虽然这个假设过于简单,甚至有时不正确,可是朴素贝叶斯仍然是一种有效的分类器

    (3)对于文本分类问题的朴素贝叶斯分类器的优化空间主要有:

            a:特征值的定义,如词袋模型的效果高于词集模型,停用词表的优化等

            b:切词的规则

    案例代码见:英文评论留言分类

    相关文章

      网友评论

        本文标题:基于概率论的分类方法—朴素贝叶斯

        本文链接:https://www.haomeiwen.com/subject/klskkqtx.html