朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解

news2024/12/26 11:19:08

相关文章

  1. K近邻算法和KD树详细介绍及其原理详解
  2. 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解

文章目录

  • 相关文章
  • 前言
  • 一、朴素贝叶斯算法
  • 二、拉普拉斯平滑
  • 总结


前言

  今天给大家带来的主要内容包括:朴素贝叶斯算法、拉普拉斯平滑。这些内容也是机器学习的基础内容,本文不全是严格的数学定义,也包括生动的例子,所以学起来不会枯燥。下面就是本文的全部内容了!


一、朴素贝叶斯算法

  现在有这样一个例子,大学生小明是班级里最受欢迎的同学,有一天老师布置的题目非常难,于是小明给班级里面的30个同学群发求助消息:

请添加图片描述

图1:小明群发求助

  由于小明的人缘很好,收到消息的同学均纷纷回复小明,但是小明发现这30个回复里面既有作业答案,同时也意外收获了深情的告白。小明可以分辨出有16份作业答案,还有13份情书,唯独班长的回复小明没有看懂:

请添加图片描述

图2:小明收到回复

  于是小明想,可不可以按照消息中出现的关键词来给班长的回复分一下类,看看班长的回复是作业答案还是情书:

请添加图片描述

图3:小明利用关键词判断班长的回复

  小明首先根据收到的消息计算任何一则消息是作业答案还是情书的概率:

请添加图片描述

图4:分别计算得到作业答案和情书的出现概率

  然后从所有的消息中选定了四个关键词作为分类依据,并记录下每一个词在作业答案和情书中出现的次数:

请添加图片描述

图5:记录每一个词在作业答案和情书中出现的次数

  随后小明在两种情况下分别计算关键词出现的概率,例如在作业答案消息中,“喜欢”这个词一共出现了3次,而所有关键词出现了15次,所以在作业答案消息中出现“喜欢”这个词的概率是 3 15 \frac{3}{15} 153,以此类推,可以得到所有关键词在两种不同消息中出现的概率:

请添加图片描述

图6:计算所有关键词在两种不同消息中出现的概率

  当我们计算得到所有关键词在两种不同消息中出现的概率后,再来分析班长的回复,假设班长给小明发的消息中包含“红豆”和“喜欢”两个关键词,首先我们先假设这是一份作业,然后再乘以作业中出现“红豆”和“喜欢”两个关键词的概率:

请添加图片描述

图7:利用条件概率公式计算此信息可能是作业答案的概率

  这个公式的计算结果可以理解为猜测这是一份作业的正确程度,代入数据可以计算得到:

请添加图片描述

图8:代入数据得到此信息可能是作业答案的概率值

  同样可以计算假设这是一份情书的正确程度:

请添加图片描述

图9:代入数据得到此信息可能是情书的概率值

  很明显,小明收到的班长的信息可能为情书的概率要比可能为作业答案的概率要高,所以小明得出结论,原来班长发的是一封情书:

请添加图片描述

图10:小明最终判断出了班长的信息是情书

  以上整个过程就是我们常说的朴素贝叶斯算法,在朴素贝叶斯算法中,假设两个特征维度之间是相互独立的,在刚才的例子中,认为两个关键词是相互独立的,也就是说他们出现的顺序和上下文关系并不影响计算结果,哪怕它们表达的意思天差地别也不会有任何影响:

请添加图片描述

图11:朴素贝叶斯算法名称的由来

  但是在现实情况中很少有相互独立的情况发生,大多都是有关联的,所以维度之间相互独立的假设就显得太过于简单粗暴,那么这种算法就被称为朴素贝叶斯算法,刚刚通过文字和例子给大家直观介绍了什么是朴素贝叶斯算法,下面让我们从数学角度总结一下朴素贝叶斯算法。

  现在假设给定一个数据集 T T T,其中包含:
T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) T={(x_{1},y_{1}),(x_{2},y_{2}),\dots,(x_{n},y_{n})} T=(x1,y1),(x2,y2),,(xn,yn)
  对于其中的参数需要注意其含义:

  • x i = ( x 1 , … , x n ) x_{i}=(x^{1},\dots,x^{n}) xi=(x1,,xn) x i ( 1 ≤ x ≤ n ) x_{i}(1≤x≤n) xi(1xn)是样本特征,由一系列独立的特征维度构成
  • y i = c k y_{i}=c_{k} yi=ck y i ( 1 ≤ y ≤ n ) y_{i}(1≤y≤n) yi(1yn)是样本类别, y i y_{i} yi可能属于 c i ( 1 ≤ i ≤ k ) c_{i}(1≤i≤k) ci(1ik)中的任何一个

  刚才我们已经介绍过了,朴素贝叶斯算法就是基于样本特征 x x x来预测样本属于的类别 y y y。根据贝叶斯定理,我们可以得到这样一个看似复杂的等式:
P ( y = c k ∣ x ) = P ( y = c k ) P ( x ∣ y = c k ) ∑ k P ( y = c k ) P ( x ∣ y = c k ) P\left(y=c_{k} \mid x\right)=\frac{P\left(y=c_{k}\right) P\left(x \mid y=c_{k}\right)}{\sum_{k} P\left(y=c_{k}\right) P\left(x \mid y=c_{k}\right)} P(y=ckx)=kP(y=ck)P(xy=ck)P(y=ck)P(xy=ck)
  在上式中,因为分母上的每一个值对每一个类别来说都是一样的,所以我们可以将上式简化一下,得到一个正比关系:
P ( y = c k ∣ x ) ∝ P ( y = c k ) P ( x ∣ y = c k ) P\left(y=c_{k} \mid x\right) \propto P\left(y=c_{k}\right) P\left(x \mid y=c_{k}\right) P(y=ckx)P(y=ck)P(xy=ck)
  在上式中, y y y就是可能被分类的类别,也就是刚才例子中的作业答案或者情书,而 x x x就是关键词的集合。因为我们假设 x x x的特征是相互独立的,所以可以把它们拆分成一系列条件概率的相乘:
P ( y = c k ∣ x ) ∝ P ( y = c k ) ∏ j P ( x j ∣ y = c k ) P\left(y=c_{k} \mid x\right) \propto P\left(y=c_{k}\right) \prod_{j} P\left(x^{j} \mid y=c_{k}\right) P(y=ckx)P(y=ck)jP(xjy=ck)
  通过上式就可以在例子中计算分类正确的概率,最后选择正确分类概率最高的类别作为分类结果即可,这就是朴素贝叶斯法的数学形式。

二、拉普拉斯平滑

  我们再来看另一个例子,假设有一段话是这样写的:

请添加图片描述

图12:待判断的一段话

  我们现在要判断它是作业答案还是情书,那么还是按照上面介绍的朴素贝叶斯算法来计算它们的正确程度:

请添加图片描述

图13:按照朴素贝叶斯算法对其进行分类

  因为“喜欢”这个词出现了三次,所以需要乘三次,也就是为什么需要计算三次方。并且情书中并没有“辛苦”这个关键词出现过,所以“辛苦”在情书中出现的概率为0,所以导致最后判断其为情书的概率为0,算法从而将这段信息判断为作业答案。

  很明显这样是不对的,我们人类可以很轻松的判断出这是一份情书,但是计算机使用算法计算是死的,并没有人类的情感。出现上面那种情况的原因是什么呢?是因为“辛苦”在情书中出现的概率为0,从而导致最后的计算结果为0,为了解决这个问题,我们可以使用拉普拉斯平滑技巧。

  拉普拉斯平滑技巧就是在每个关键词上面人为增加一个出现的次数,这样就可以保证每一项都不为0:

请添加图片描述

图14:使用拉普拉斯平滑技巧避免出现0的概率

  按照拉普拉斯平滑后的次数,我们可以重新计算每个关键词出现的频率:

请添加图片描述

图15:按照拉普拉斯平滑后的次数重新计算每个关键词出现的频率

  当我们使用平滑后的结果,再计算时就可以得到正确的结论了:

请添加图片描述

图16:最终得到了正确的结果

总结

  以上就是本文的全部内容了,这个系列还会继续更新,给大家带来更多的关于机器学习方面的算法和知识,下篇博客见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AXI-Lite 学习笔记

AXI-Lite 学习笔记 参考 FPGA:AXI_Lite总线基础2-1]、第二节 AXI总线介绍、ZYNQ PL与PS交互专题_哔哩哔哩_bilibili AXI-Lite总线系列1 - 基础知识_哔哩哔哩_bilibili AXI4 介绍 AXI4 是ARM公司提出的一种片内总线,描述了主从设备之间的数据传输方式。主…

深入浅出原核基因表达调控(乳糖操纵子、色氨酸操纵子)

原核基因表达调控 前言 自然界里,能量时有时无,各种生命为了让自己能够活下去,需要适应环境,在不同的环境合成不同的蛋白质。 原核生物体内有很多细胞,细胞里面有很多蛋白质,但是这些蛋白质在这些细胞里…

React Draggable插件实现拖拽功能

React Draggable插件实现拖拽功能1.下载Draggable插件2.引入Draggable插件3.设置一个div,并设置样式,并用Draggable包裹起来4.设置拖拽的范围5.Draggable常用props1.下载Draggable插件 npm install react-draggable2.引入Draggable插件 // 引入拖拽插件…

浅谈指向二维数组元素的指针变量

(1)指向数组元素的指针变量 例1.有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值. 编写程序 1 #include <stdio.h>2 int main()3 {4 int a[3][4] { 1,3,5,7,9,11,13,15,17,19,21,23 };5 int *p;6 for (p a[0]; p < a[0] 12; p) …

sni+tomcat漏洞复现

sni SNI产生背景 SSL以及TLS&#xff08;SSL的升级版&#xff09;为客户端与服务器端进行安全连接提供了条件。但是&#xff0c;由于当时技术限制&#xff0c;SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计&#xff0c;PKI 认为一个服务器只为一个…

SpringBoot简单集成OpenFeign

问题 在SpringBoot中简单集成Feign&#xff0c;不想使用Rest Temple了。 步骤 Maven <properties><spring.cloud-version>2022.0.1</spring.cloud-version></properties> <dependencyManagement><dependencies><dependency><g…

javaEE 初阶 — 连接管理机制

文章目录连接管理机制1. 建立连接&#xff08;三次握手&#xff09;2. 断开连接&#xff08;四次挥手&#xff09;TCP 的工作机制确认应答机制 超时重传机制 连接管理机制 比如 主机A 的空间存储了 主机B 的 ip 和 端口&#xff0c;主机B 的空间存储了 主机A 的 ip 和 端口。…

autoCAD2022 - 设置新的原点

文章目录autoCAD2022 - 设置新的原点概述笔记UCS原点设置功能的菜单位置ENDautoCAD2022 - 设置新的原点 概述 上次整板子的dxf时, 原来的原点不合适, 想调整一下. 当时整完了, 没记录. 这次用的时候, 又找半天… 设置新原点的功能, 不在顶部菜单中, 而是在视图右上角的UCS图标…

微服务网关(十二)redis流量统计

微服务网关&#xff08;十二&#xff09;redis流量统计中间件 redis流量统计中间件 redis详细&#xff1a; redis.go: // RedisConfPipline redis连接的设置方法&#xff0c;例如在流量统计中间件中设置数据和超时时间 func RedisConfPipline(pip ...func(c redis.Conn)) e…

Linux 内核定时器实验

目录 一、内核时间管理简介 二、内核定时器简介 三、驱动编写 1、修改makefile 2、添加定义 3、初始化led函数 4、添加调用 5、初始化定时器与定时器处理函数 这部分代码如下 四、ioctl函数 五、内核添加unlocked_ioctl 函数 1、添加设备操作集unlocked_ioctl成员 2…

【Android 后台持续定位】

最近工作中遇到了一个涉及后台持续性定位的问题。这里做一下总结&#xff1a;随着Android版本的条件&#xff0c;Google对后台服务管控的也是越来越严格。 这时有的小伙伴会说了&#xff0c;开启一个service然后把服务和通知关联一下变成前台服务&#xff0c;不就行了&#xff…

steam/csgo搬砖,2023年最暴利的项目

这个项目赚钱主要来源于两个地方&#xff1a; 1.比如说今天美元的汇率是1美元6.8人民币&#xff0c;那我们有特定的渠道能拿到1美元5.0-5.5左右人民币的价格&#xff0c;100美元的汇率差利润就有180元左右的利润&#xff0c;当然这个价格是根据国际的汇率上下会有浮动的。 2.…

什么是极速文件传输,极速文件传输如何进行大文件传输

当谈到大文件传输时&#xff0c;人们总是担心大数据文件的大小以及将它们从一个位置交换到另一个位置需要多长时间。由于数据捕获高分辨率视频和图像的日益复杂&#xff0c;文件的大小不断增加。数据工作流在地理上变得越来越分散。在一个位置生成的文件在其他位置处理或使用。…

晚上适合做什么副业?靠自己的劳动赚钱最光荣

对于大多数普通人来说&#xff0c;晚上的空闲时间是很多的&#xff0c;但是却总是在手机上打游戏、刷视频而白白度过了一晚上。其实最近几年来很多朋友都想利用晚上的时间做一些副业&#xff0c;因为当下的工资已经满足不了自己的需求&#xff0c;再加上生活方方面面的压力&…

【swagger2】开发api文档

文章目录一、swagger2 简介背景Open API ???swagger2的作用swagger2常用工具组件&#xff1a;二、Springfox三、springBoot使用swagger2&#xff08;简单示例&#xff09;四、Swagger-UI使用五、配置文件1、配置类&#xff1a;给docket上下文配置api描述信息2、配置类&#…

净现值、投资回收期例题讲解

净现值概念净现值&#xff08;NPV&#xff09;&#xff1a;指今后某年的Y元相当于今年的X元。需要关注两个概念&#xff1a;利率&#xff1a;利率是指借款、存入或借入金额&#xff08;称为本金总额&#xff09;中每个期间到期的利息金额与票面价值的比率。贴现率&#xff08;D…

微软Bing的AI人工只能对话体验名额申请教程

微软Bing 免费体验名额申请教程流程ChatGPT这东西可太过火了。国外国内&#xff0c;圈里圈外都是人声鼎沸。微软&#xff0c;谷歌&#xff0c;百度这些大佬纷纷出手。连看个同花顺都有GPT概念了&#xff0c;搞技术&#xff0c;做生意的看来都盯上了 流程 下面就讲一下如何申…

Python3遍历文件夹提取关键字及其附近字符

要求&#xff1a; 1&#xff0c;遍历文件夹下所有的.xml文件 2&#xff0c;从.xml文件中提取关键字以及左右十个字符 3&#xff0c;输出到excel 一&#xff1a;遍历文件夹找到所有xml文件及其路径 for root, dirs, files in os.walk(self.inputFilePath):for file in files:…

靓号管理-搜索

搜索手机号&#xff1a; 最后一条就是使用的关键mobile__contains 使用字典&#xff1a; 后端的逻辑&#xff1a; """靓号列表"""data_dict {}search_data request.GET.get(q, "")# 根据关键字进行搜索&#xff0c;如果关键字存在&…

综合项目 旅游网 【5.旅游线路收藏功能】

分析判断当前登录用户是否收藏过该线路当页面加载完成后&#xff0c;发送ajax请求&#xff0c;获取用户是否收藏的标记根据标记&#xff0c;展示不同的按钮样式编写代码后台代码RouteServlet/*** 判断当前登录用户是否收藏过该路线*/ public void isFavorite(HttpServletReques…