实现带有拉普拉斯修正的朴素贝叶斯_数据科学 | 算法工程师必备的机器学习贝叶斯分类器...
作者:华校专
作者信息:
华校专,曾任阿里巴巴资深算法工程师、智易科技首席算法研究员,现任腾讯高级研究员,《Python 大战机器学习》的作者。
1 贝叶斯定理
1.1 贝叶斯定理
设 为试验 的样本空间; 为 的一组事件。若
则称 为样本空间 的一个划分。
如果 为样本空间 的一个划分,则对于每次试验,事件 中有且仅有一个事件发生。
全概率公式 :设试验 的样本空间为 , 为 的事件, 为样本空间 的一个划分,且
则有:
贝叶斯定理 :设试验 的的样本空间为 , 为 的事件, 为样本空间 的一个划分,且
则有:
1.2 先验概率、后验概率
先验概率:根据以往经验和分析得到的概率。
后验概率:根据已经发生的事件来分析得到的概率。
例:假设山洞中有熊出现的事件为 ,山洞中传来一阵熊吼的事件为 。
- 山洞中有熊的概率为 。它是先验概率,根据以往的数据分析或者经验得到的概率。
- 听到熊吼之后认为山洞中有熊的概率为 。它是后验概率,得到本次试验的信息从而重新修正的概率。
2 朴素贝叶斯法
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对给定的训练集:
- 首先基于特征条件独立假设学习输入、输出的联合概率分布。
- 然后基于此模型,对给定的输入 ,利用贝叶斯定理求出后验概率最大的输出 。
朴素贝叶斯法不是贝叶斯估计,贝叶斯估计是最大后验估计。
2.1 原理
设输入空间 为 维向量的集合 ,输出空间为类标记集合
令 为定义在 上的随机向量, 为定义在 上的随机变量。令 为 和 的联合概率分布。假设训练数据集 由 独立同分布产生。朴素贝叶斯法通过训练数据集学习联合概率分布 。具体的学习下列概率分布:
- 先验概率分布:
- 条件概率分布:
朴素贝叶斯法对条件概率做了特征独立性假设:
- 这意味着在分类确定的条件下,用于分类的特征是条件独立的。
- 该假设使得朴素贝叶斯法变得简单,但是可能牺牲一定的分类准确率。
根据贝叶斯定理:
考虑分类特征的条件独立假设有:
则朴素贝叶斯分类器表示为:
由于上式的分母 与 的取值无关,则分类器重写为:
2.2 期望风险最小化
朴素贝叶斯分类器是后验概率最大化,等价于期望风险最小化。
令损失函数为:
根据 有:
为了使得期望风险最小化,只需要对 中的元素极小化。令 ,则有:
即:期望风险最小化,等价于后验概率最大化。
2.3 算法
在朴素贝叶斯法中,学习意味着估计概率: , 。
可以用极大似然估计相应概率。
(1) 先验概率 的极大似然估计为:
(2) 设第 个特征 可能的取值为 ,则条件概率 的极大似然估计为:
其中: 为示性函数, 表示第 个样本的第 个特征。
朴素贝叶斯算法 :
输入 :
(1) 训练集
, 为第 个样本的第 个特征。其中 , 为第 个特征可能取到的第 个值。
(2) 实例 。
输出 :实例 的分类
算法步骤:
(1) 计算先验概率以及条件概率:
(2) 对于给定的实例 , , ,计算:
(3) 确定实例 的分类:
2.4 贝叶斯估计
在估计概率 的过程中,分母 可能为 0 。这是由于训练样本太少才导致 的样本数为 0 。而真实的分布中, 的样本并不为 0 。解决的方案是采用贝叶斯估计(最大后验估计)。
假设第 个特征 可能的取值为 ,贝叶斯估计假设在每个取值上都有一个先验的计数 。即:
它等价于在 的各个取值的频数上赋予了一个正数 。若 的样本数为0,则它假设特征 每个取值的概率为 ,即等可能的。
采用贝叶斯估计后, 的贝叶斯估计调整为:
- 当 时,为极大似然估计当 时,为拉普拉斯平滑
- 若 的样本数为 0,则假设赋予它一个非零的概率 。
3 半朴素贝叶斯分类器
朴素贝叶斯法对条件概率做了特征的独立性假设:
但是现实任务中这个假设有时候很难成立。若对特征独立性假设进行一定程度上的放松,这就是半朴素贝叶斯分类器 semi-naive Bayes classifiers 。
半朴素贝叶斯分类器原理:适当考虑一部分特征之间的相互依赖信息,从而既不需要进行完全联合概率计算,又不至于彻底忽略了比较强的特征依赖关系。
3.1 独依赖估计 OED
独依赖估计One-Dependent Estimator:OED是半朴素贝叶斯分类器最常用的一种策略。它假设每个特征在类别之外最多依赖于一个其他特征,即:
其中 为特征 所依赖的特征,称作的 父特征。
如果父属性已知,那么可以用贝叶斯估计来估计概率值 。现在的问题是:如何确定每个特征的父特征?
不同的做法产生不同的独依赖分类器。
3.1.1 SPODE
最简单的做法是:假设所有的特征都依赖于同一个特征,该特征称作超父。然后通过交叉验证等模型选择方法来确定超父特征。这就是 SPODE:Super-Parent ODE 方法。
假设节点 代表输出变量 ,节点 代表属性 。下图给出了超父特征为 时的 SPODE。
3.1.2 TAN
TAN:Tree Augmented naive Bayes 是在最大带权生成树算法基础上,通过下列步骤将特征之间依赖关系简化为如下图所示的树型结构:
(1) 计算任意两个特征之间的条件互信息。记第 个特征 代表的结点为 ,标记代表的节点为 则有:
如果两个特征 相互条件独立,则
则有条件互信息 则在图中这两个特征代表的结点没有边相连。
(2) 以特征为结点构建完全图,任意两个结点之间边的权重设为条件互信息 。
(3) 构建此完全图的最大带权生成树,挑选根结点(下图中根节点为节点 ,将边置为有向边。
(4) 加入类别结点 ,增加 到每个特征的有向边。因为所有的条件概率都是以 为条件的。
4 其它讨论
朴素贝叶斯分类器的优点:
- 性能相当好,它速度快,可以避免维度灾难。
- 支持大规模数据的并行学习,且天然的支持增量学习。
朴素贝叶斯分类器的缺点:
- 无法给出分类概率,因此难以应用于需要分类概率的场景。
实现带有拉普拉斯修正的朴素贝叶斯_数据科学 | 算法工程师必备的机器学习贝叶斯分类器...相关推荐
- 朴素贝叶斯(Naive Bayes)原理+编程实现拉普拉斯修正的朴素贝叶斯分类器
贝叶斯方法与朴素贝叶斯 1.生成模型与判别模型 2.贝叶斯 2.1贝叶斯公式 2.2贝叶斯方法 3朴素贝叶斯 3.1条件独立性假设 3.2朴素贝叶斯Naive在何处? 3.3朴素贝叶斯的三种模型 3. ...
- 机器学习(六):朴素贝叶斯及拉普拉斯修正
一.前言 2022年的第一篇博客,<机器学习>这个专栏去年由于自己的时间原因,更新的不勤,乘最近稍微有点时间准备开始陆陆续续更新,今天先来一道开胃菜:带拉普拉斯修正的朴素贝叶斯,话不多说请 ...
- 贝叶斯 朴素贝叶斯_手动执行贝叶斯分析
贝叶斯 朴素贝叶斯 介绍 (Introduction) Bayesian analysis offers the possibility to get more insights from your ...
- 【数据挖掘】拉普拉斯修正 ( 判别模型 | 概率模型 | 贝叶斯分类 | 拉普拉斯修正 | 朴素贝叶斯分类应用场景 | 朴素贝叶斯优缺点 )
文章目录 I . 判别模型 与 概率模型 II . 贝叶斯分类 III . 拉普拉斯修正 IV . 使用 朴素贝叶斯分类器 + 拉普拉斯修正 为样本分类 ( 完整分类流程 ) V . 朴素贝叶斯分类器 ...
- 机器学习-贝叶斯模型-西瓜书代码(Bayse)-拉普拉斯修正
以下代码是本人在学习西瓜书时花费两个礼拜根据原理进行原创,若需转载请咨询本人,谢谢! 自我研究模拟代码 附上离散类别截图 数据截图: 运行截图: Bayes_config.py "" ...
- 机器学习基础(六):贝叶斯分类(贝叶斯决策论、朴素/半朴素贝叶斯分类器、贝叶斯网、EM算法)
6.贝叶斯分类 6.1贝叶斯决策论Bayesian decision theory 概率框架下实施决策的基本方法. 对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和 ...
- 朴素贝叶斯算法实现 | Java | 机器学习 | 贝叶斯
做的一个结课作业,用Java实现了朴素贝叶斯算法 关于贝叶斯算法可以参考西瓜书.贝叶斯分类器-华校专 设计思路 创建数据类.朴素贝叶斯算法类和验证模型的类. 数据类DataFrame,用来加载和存储数 ...
- 当你看完这篇朴素贝叶斯(NB)算法后,是否会有怦然心动的感觉
一.引言 当一位气象学家提供天气预报时,通常会使用像"明天70%的可能性会下雨"这样的术语来预测j降雨,这些预测称为下雨的概率.你有没有想过他们是如何计算的呢? 本文将讲述一种机器 ...
- 朴素贝叶斯 半朴素贝叶斯_使用朴素贝叶斯和N-Gram的Twitter情绪分析
朴素贝叶斯 半朴素贝叶斯 In this article, we'll show you how to classify a tweet into either positive or negativ ...
- 情感分析朴素贝叶斯_朴素贝叶斯推文的情感分析
情感分析朴素贝叶斯 Millions of tweets are posted every second. It helps us know how the public is responding ...
最新文章
- metasploit 一款开源的渗透测试框架
- 手把手教你代码重构,是时候告别屎一样的代码了!
- Python之旅:列表
- 【Linux系统编程】进程间通信之消息队列
- windows phone开发第一步:搭建软件开发环境
- struts2 标签不能使用EL 表单式
- 利用 Celery 构建 Web 服务的后台任务调度模块
- DFS破解“迷宫问题”(洛谷P1605题题解,Java语言描述)
- linux中写如空格参数,Vim中Tab与空格缩进
- C++新特性探究(13.6):右值引用再探究
- android 内存溢出检查,Android Handler使用导致内存溢出附带LeakCanary排查
- java私塾跟我学系列_java 私塾作业
- Anylogic-----------集合Collection
- 【线性代数】P6 矩阵的幂转置特殊矩阵
- axure能做剪切蒙版吗_***自动售货机能做吗
- 如何用adb命令启动安装的APK
- 算法分析与设计——背包问题
- mac bootcamp 安装 win7
- Word论文格式-页眉页脚页码
- python :jieba库的使用大全
热门文章
- linux内核之字符设备驱动图解
- 【翻译】YARN Architecture
- SQL注入***的种类和防范手段
- 看完这道题,你敢在心里承认自己是高手么
- 磁珠 符号_如何理解电子元件磁珠?
- 无法保存关闭文件 苹果电脑 显示正在保存_??Linux文件编辑 - 给你骨质唱疏松
- 知识表示与计算机,两分钟了解人工智能中的“知识与知识表示”
- linux+脚本+pid,Linux启动脚本输出pid
- 事务失败返回_分布式事务有这一篇就够了!
- PHP 模拟库存出库商品