社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

数据科学 | 算法工程师必备的机器学习--贝叶斯分类器

运筹OR帷幄 • 4 年前 • 509 次点击  
↑↑↑↑↑点击上方蓝色字关注我们!






『运筹OR帷幄』原创


作者:华校专


作者信息:

华校专,曾任阿里巴巴资深算法工程师、智易科技首席算法研究员,现任腾讯高级研究员,《Python 大战机器学习》的作者。

编者按:

算法工程师必备系列更新啦!继上次推出了算法工程师必备的数学基础后,小编继续整理了必要的机器学习知识,全部以干货的内容呈现,哪里不会学哪里,老板再也不用担心你的基础问题!本章介绍贝叶斯分类器,往期内容请关注公众号,在“号内搜”搜索“算法工程师必备的机器学习”获取。


1 贝叶斯定理

1.1 贝叶斯定理

  1. 为试验 的样本空间; 的一组事件。若

    则称 为样本空间 的一个划分。

  2. 如果 为样本空间 的一个划分,则对于每次试验,事件 中有且仅有一个事件发生。

  3. 全概率公式 :设试验 的样本空间为 的事件, 为样本空间 的一个划分,且

    则有:


  4. 贝叶斯定理 :设试验 的的样本空间为 的事件, 为样本空间 的一个划分,且

    则有:


1.2 先验概率、后验概率

  1. 先验概率:根据以往经验和分析得到的概率。

    后验概率:根据已经发生的事件来分析得到的概率。

  2. 例:假设山洞中有熊出现的事件为 ,山洞中传来一阵熊吼的事件为

  • 山洞中有熊的概率为 。它是先验概率,根据以往的数据分析或者经验得到的概率。
  • 听到熊吼之后认为山洞中有熊的概率为 。它是后验概率,得到本次试验的信息从而重新修正的概率。

2 朴素贝叶斯法

  1. 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对给定的训练集:

  • 首先基于特征条件独立假设学习输入、输出的联合概率分布。
  • 然后基于此模型,对给定的输入 ,利用贝叶斯定理求出后验概率最大的输出
  • 朴素贝叶斯法不是贝叶斯估计,贝叶斯估计是最大后验估计。

  • 2.1 原理

    1. 设输入空间 维向量的集合 ,输出空间为类标记集合

      为定义在 上的随机向量, 为定义在 上的随机变量。令 的联合概率分布。假设训练数据集
      独立同分布产生。朴素贝叶斯法通过训练数据集学习联合概率分布 。具体的学习下列概率分布:


    • 先验概率分布:
    • 条件概率分布:
  • 朴素贝叶斯法对条件概率做了特征独立性假设:


    • 这意味着在分类确定的条件下,用于分类的特征是条件独立的。
    • 该假设使得朴素贝叶斯法变得简单,但是可能牺牲一定的分类准确率。
  • 根据贝叶斯定理:

    考虑分类特征的条件独立假设有:

    则朴素贝叶斯分类器表示为:

    由于上式的分母 的取值无关,则分类器重写为:


  • 2.2 期望风险最小化

    1. 朴素贝叶斯分类器是后验概率最大化,等价于期望风险最小化。

    2. 令损失函数为:

    3. 根据 有:

      为了使得期望风险最小化,只需要对 中的元素极小化。令 ,则有:

      即:期望风险最小化,等价于后验概率最大化。

    2.3 算法

    1. 在朴素贝叶斯法中,学习意味着估计概率:

    2. 可以用极大似然估计相应概率。

      (1) 先验概率 的极大似然估计为:


      (2) 设第 个特征 可能的取值为 ,则条件概率 的极大似然估计为:

      其中: 为示性函数, 表示第 个样本的第 个特征。

    3. 朴素贝叶斯算法 :

    • 输入 :

      (1) 训练集

      为第 个样本的第 个特征。其中 为第 个特征可能取到的第 个值。


      (2) 实例

    • 输出 :实例 的分类

    • 算法步骤:

      (1) 计算先验概率以及条件概率:


      (2) 对于给定的实例 , ,计算:


      (3) 确定实例 的分类:


    2.4 贝叶斯估计

    1. 在估计概率 的过程中,分母 可能为 0 。这是由于训练样本太少才导致 的样本数为 0 。而真实的分布中, 的样本并不为 0 。解决的方案是采用贝叶斯估计(最大后验估计)。

    2. 假设第 个特征 可能的取值为 ,贝叶斯估计假设在每个取值上都有一个先验的计数 。即:

      它等价于在 的各个取值的频数上赋予了一个正数 。若 的样本数为0,则它假设特征 每个取值的概率为 ,即等可能的。

    3. 采用贝叶斯估计后, 的贝叶斯估计调整为:

    • 时,为极大似然估计当 时,为拉普拉斯平滑
    • 的样本数为 0,则假设赋予它一个非零的概率

    3 半朴素贝叶斯分类器

    1. 朴素贝叶斯法对条件概率做了特征的独立性假设:


      但是现实任务中这个假设有时候很难成立。若对特征独立性假设进行一定程度上的放松,这就是半朴素贝叶斯分类器 semi-naive Bayes classifiers 。

    2. 半朴素贝叶斯分类器原理:适当考虑一部分特征之间的相互依赖信息,从而既不需要进行完全联合概率计算,又不至于彻底忽略了比较强的特征依赖关系。

    3.1 独依赖估计 OED

    1. 独依赖估计One-Dependent Estimator:OED是半朴素贝叶斯分类器最常用的一种策略。它假设每个特征在类别之外最多依赖于一个其他特征,即:

      其中 为特征 所依赖的特征,称作的 父特征。


    2. 如果父属性已知,那么可以用贝叶斯估计来估计概率值 。现在的问题是:如何确定每个特征的父特征?

    不同的做法产生不同的独依赖分类器。

    3.1.1 SPODE

    1. 最简单的做法是:假设所有的特征都依赖于同一个特征,该特征称作超父。然后通过交叉验证等模型选择方法来确定超父特征。这就是 SPODE:Super-Parent ODE 方法。

      假设节点  代表输出变量 ,节点 代表属性 。下图给出了超父特征为 时的 SPODE。

    SPODE

    3.1.2 TAN

    1. TAN:Tree Augmented naive Bayes 是在最大带权生成树算法基础上,通过下列步骤将特征之间依赖关系简化为如下图所示的树型结构:

      (1) 计算任意两个特征之间的条件互信息。记第 个特征 代表的结点为 ,标记代表的节点为 则有:

      如果两个特征 相互条件独立,则

      则有条件互信息
      则在图中这两个特征代表的结点没有边相连。


      (2) 以特征为结点构建完全图,任意两个结点之间边的权重设为条件互信息

      (3) 构建此完全图的最大带权生成树,挑选根结点(下图中根节点为节点 ,将边置为有向边。

      (4) 加入类别结点 ,增加 到每个特征的有向边。因为所有的条件概率都是以 为条件的。

    4 其它讨论

    1. 朴素贝叶斯分类器的优点:

    • 性能相当好,它速度快,可以避免维度灾难。
    • 支持大规模数据的并行学习,且天然的支持增量学习。
  • 朴素贝叶斯分类器的缺点:

    • 无法给出分类概率,因此难以应用于需要分类概率的场景。


    相关文章推荐

    往期算法工程师系列文章请点击蓝字标题,即可阅读《数据科学|算法工程师必备的机器学习--线性模型》



    本文福利

    可以在 公众号后台 回复关键词:“ pandas电子书 获取由我平台编辑精心整理的pandas电子书和源代码,如果觉得有用, 请勿吝啬你的留言和赞哦!


    —— 完 ——




    文章须知

    文章作者:华校专 

    责任编辑:征帆 周岩 logic

    审核编辑:阿春

    微信编辑:征帆

    本文由『运筹OR帷幄』原创发布

    如需转载请在公众号后台获取转载须知


    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/74739
     
    509 次点击