机器学习之朴素贝叶斯一

news2024/11/20 3:21:28

一、概述

朴素贝叶斯算法是典型的有监督学习算法,解决的是分类问题
贝叶斯算法是一种基于贝叶斯定理的分类算法,它的优点和缺点如下:

优点:

  1. 算法原理简单易懂,实现较为容易;
  2. 可以利用先验知识对模型进行训练,并不需要大量的数据就可以得到合理的预测结果;
  3. 对噪声数据具有鲁棒性,因为模型可以自动学习并忽略噪声数据;
    能够处理多分类问题。

缺点:

  1. 需要先验知识作为输入,若先验信息不准确,则会影响模型的预测结果;
  2. 在输入变量的数量很大时,计算复杂度会非常高,需要耗费大量的时间和计算资源;
  3. 对连续型变量的建模较难,需要对其进行离散化处理,这样就可能会丢失一些信息;
  4. 当特征之间存在相互关联时,贝叶斯算法的表现可能会受到限制。

二、什么是贝叶斯?

  1. 贝叶斯是指贝叶斯学派(Bayesian),它是概率论的一个分支,其研究的是不确定性的量化和推理。具体来说,贝叶斯学派的核心思想是基于贝叶斯公式进行不确定性推断。

  2. 贝叶斯公式是概率论中的一项基本定理,它描述了在给定某些先验条件下,根据新的观测数据如何更新已有的信念。简单地说,贝叶斯公式可以用来计算在得到新信息后,对事件可能发生的概率进行修正。

  3. 贝叶斯学派认为,我们对未知事物的判断应该基于主观经验和现有证据,而非仅仅依赖于观测数据。因此,在贝叶斯学派的框架下,我们可以将个人经验和领域知识作为先验知识输入到模型中,然后根据新的数据来不断调整我们的信念,最终得出更加准确的结论。

  4. 贝叶斯方法在机器学习、统计学和人工智能等领域中得到广泛的应用,例如朴素贝叶斯分类、贝叶斯网络、马尔可夫链蒙特卡洛(MCMC)等算法。

三、朴素贝叶斯与贝叶斯决策论的关系

  1. 朴素贝叶斯算法是基于贝叶斯决策论的一种分类算法
  2. 贝叶斯决策论是指给定一个待分类的样本,通过其先验概率各个特征的条件概率计算样本属于某个类别的后验概率,从而得到最终的分类结果。
  3. 而朴素贝叶斯算法假设各个特征之间相互独立,通过计算每个特征对于不同类别的条件概率来得到最终的分类结果。因此,朴素贝叶斯算法是一种基于贝叶斯决策论并且做出了条件独立性假设的分类算法

例如:假设
现在有两组样本数据,我们使用p1(x,y)表示样本数据一中数据点(x,y),用p2(x,y)表示样本数据二中的数据点(x,y)。

  1. 如果p1(x,y) > p2(x,y),那么类别为1
  2. 如果p1(x,y) < p2(x,y),那么类别为2
    也就是说,我们会选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有最高概率的决策。
    已经了解了贝叶斯决策理论的核心思想,那么接下来,就是学习如何计算p1和p2概率。

四、贝叶斯理论推导.

经过上面的例子我们清楚,贝叶斯决策论是指给定一个待分类的样本,通过其先验概率各个特征的条件概率计算样本属于某个类别的后验概率,从而得到最终的分类结果,因此计算p1和p2是我们的最终目的。
计算这两概率就绕不开条件概率,因为贝叶斯算法利用了条件概率来做出决策.

1.条件概率

指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。
例如:
圆A与圆B相交,进行推导条件概率:

在这里插入图片描述

2. 全概率公式:

条件该率只是帮助我们进行部分内容计算,而想要最终的概率结果,仍然需要进行全概率公式计算:

进行简单推导
在这里插入图片描述

3.进行最后计算:

经过上面的条件概率和全概率推导最后得到:

  p(A|B) = p(A)p(B|A)/p(B) 

我们把P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。
P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。
P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。

总结为:
后验概率 = 先验概率 x 调整因子

这就是贝叶斯推断的含义。我们先预估一个"先验概率",然后加入实验结果,看这个实验到底是增强还是削弱了"先验概率",由此得到更接近事实的"后验概率"。
在这里,如果"可能性函数"P(B|A)/P(B)>1,意味着"先验概率"被增强,事件A的发生的可能性变大;如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。

用一个实际例子来说明:
在这里插入图片描述

4. 推广到朴素贝叶斯的

上面有说到,朴素贝叶斯与贝斯是不同的。
朴素贝叶斯分类器是一种基于贝叶斯定理和条件独立假设的分类器。它假设每个特征之间相互独立,即每个特征对于分类结果的影响是相互独立的。这样可以大大简化模型的训练和预测,并提高计算效率。
贝叶斯的去噪则是一种基于最大后验概率估计(MAP)的方法,用于去除数据中的噪声。在贝叶斯的去噪中,我们将原始信号看作是随机变量,将噪声看作是先验概率分布,利用贝叶斯定理推导出后验概率分布。然后,根据后验概率分布进行信号恢复。与朴素贝叶斯不同,贝叶斯的去噪并没有使用条件独立假设。

相比较而言,贝叶斯算法不涉及特征和类别之间的关系,只是通过统计方法来预测某个事件的概率;而朴素贝叶斯算法则是基于特征条件独立性假设利用贝叶斯定理来进行分类决策

用公式说明就是:

在这里插入图片描述

这里说明一下为什么缺少了p(B)

我们看到朴素贝叶斯在使用的时候相对于贝叶斯缺少了p(B)

  1. 贝叶斯公式中的 p(A|B) 表示在已知事件 B 发生的情况下,事件 A 发生的概率。而朴素贝叶斯是一种基于贝叶斯公式的分类算法,在分类问题中,将特征向量看作一个事件 B,将类别看作一个事件 A

  2. 因此,在计算样本 x 属于某个类别 C后验概率时,朴素贝叶斯假设各个特征之间相互独立,即 p(x|C) = p(x1|C)p(x2|C)...p(xn|C),其中 x1, x2, ..., xn 分别是特征向量的不同维度。这个假设简化了计算过程,但是忽略了特征之间的相关性。
    说明一下这里的不同维度是什么意思?
    不同维度指的是一个特征向量中不同的特征值,例如对于一个文本分类问题,可以将每个单词作为一个特征,那么一个特征向量就可以表示为一个包含多个单词出现次数的向量。这个向量的每个维度就代表一个单词在该文本中的出现次数,也就是一个特征值。因此,在朴素贝叶斯中,p(x|C) 表示给定类别 C 下,各个特征值(维度)之间相互独立的条件概率。

  3. 根据贝叶斯公式,朴素贝叶斯可表示为: p(C|x) = p(x|C)p(C)/p(x) 其中,p(x|C) 表示在类别 C特征向量 x 出现的概率p(C) 表示类别 C 的先验概率p(x) 表示特征向量出现的概率。由于对于所有类别都是相同的,所以可以省略分母 p(x)

  4. 因此,朴素贝叶斯的公式可以简化为: p(C|x) ∝ p(x|C)p(C) 其中,∝ 表示“正比于”。这个式子中缺少了 p(x),但是在分类问题中,对于一个给定的样本 xp(x) 对于不同的类别来说是相同的,因此省略掉后不影响最终的分类结果。

6. 示例说明

某个医院早上来了六个门诊的病人,他们的情况如下表所示:
在这里插入图片描述 现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?

根据贝叶斯定理:

在这里插入图片描述
根据朴素贝叶斯条件独立性的假设可知,"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了

在这里插入图片描述
这里可以计算:
在这里插入图片描述
因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。

这就是贝叶斯分类器的基本方法:在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。

同样,在编程的时候,如果不需要求出所属类别的具体概率,P(打喷嚏) = 0.5和P(建筑工人) = 0.33的概率是可以不用求的。

参考文章

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

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

相关文章

2.0 Vue框架设计的核心要素

本章主要讲解&#xff0c;一个好的框架在构建的时候&#xff0c;需要考虑到的要素&#xff0c;包含报错信息反馈、警告信息反馈、减少打包体积、良好的输出、特性开关&#xff08;兼容&#xff09;等 1、提升用户开发体验 提升用户开发体验主要体现在用户使用框架进行开发时&…

3DES实验 思考与练习:

T1&#xff1a;关于3DES的分析 和 库函数的思考——完全领悟了&#xff01;&#xff01;&#xff01; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/des.h> /***********************************************…

java小记

public class Test {/*** 谓类的方法就是指类中用static 修饰的方法&#xff08;非static 为实例方法&#xff09;&#xff0c;比如main 方法&#xff0c;那么可以以main* 方法为例&#xff0c;可直接调用其他类方法&#xff0c;必须通过实例调用实例方法&#xff0c;this 关键…

原生OpenFeign相较于传统HTTP工具的优化和原理

文章目录 1.HTTP工具使用流程及问题1.1 使用OkHttp3流程示例1.2 存在的两大问题 2.OpenFeign的优化3.OpenFeign实现原理3.1 使用Feign构造动态代理对象3.2 Feign动态代理的实现原理 本篇介绍的是springcloud-openfeign的底层框架io.github.openfeign&#xff0c;重点不是框架如…

【Redis】Redis缓存雪崩、缓存穿透、缓存击穿(热key问题)

目录 一、缓存穿透 1、概念 2、解决办法 1.缓存空对象 2.布隆过滤 二、缓存雪崩 1、概念 2、解决办法 1.给key设置随机的过期时间TTL 2.业务添加多级缓存 3.利用集群提供服务可用性 4.缓存业务添加降级限流 三、缓存击穿 1、概念 2、解决办法 1.互斥锁 2.逻辑…

数据结构:第三章 栈、队列和数组

文章目录 一、栈1.1栈的概念1.1.1栈的定义1.1.2栈的基本操作1.1.3栈的常见考题1.1.4小结 1.2栈的顺序存储实现1.2.1顺序栈的定义1.2.2初始化操作1.2.3进栈操作1.2.4出栈操作1.2.5获取栈顶元素操作1.2.6共享栈1.2.7小结 1.3栈的链式存储实现1.3.1链栈的定义1.3.2小结 二、队列2.…

Optional的使用详解

工作中经常会调外部接口、或者查询表等&#xff0c;如果对返回结果不进行空指针判断的话就会导致空指针异常。针对这种情况经常会使用if进行判断: private boolean isNotNull(Object param) {if (param null) {return false;} else {return true;}}这样写其实功能上没有任何问…

上班摸鱼在群里吹牛B,逮到一个阿里10年老测试开发,聊过之后收益良多...

老话说的好&#xff0c;这人呐&#xff0c;一单在某个领域鲜有敌手了&#xff0c;就会闲得蛋疼。前几天我在上班摸鱼刷群的时候认识了一位阿里测试开发大佬&#xff0c;在华为工作了10年&#xff0c;因为本人天赋比较高&#xff0c;平时工作也兢兢业业&#xff0c;现在企业内有…

USB协议分析仪

1 ULPI PHY passive sniffing mode 概念: non driving, no pull-up, no pull-down Function Control.opMode 1; // non-Driving OTG Control.DpPulldown 0; // no pull-down OTG Control.DmPulldown 0; // no pull-down USB IO.ChargerPullupEnDP 0; // no pull-up USB IO.…

九、MyBatis动态SQL

文章目录 九、动态SQL9.1 if9.2 where9.3 trim9.4 choose、when、otherwise9.5 foreach9.6 SQL片段 本人其他相关文章链接 九、动态SQL 9.1 if 总结&#xff1a;根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中。 User getUserByParamsWithIf(User user…

缓存击穿,穿透,雪崩

一、缓存穿透 是用户访问的数据既不在缓存当中&#xff0c;也不在数据库中。 如果从数据库查询不到数据&#xff0c;则不写入缓存。这就导致每次请求都会到数据库进行查询&#xff0c;缓存也失去了意义。 当高并发或有人利用不存在的Key频繁攻击时&#xff0c;数据库的压力骤…

AI 工具合辑盘点(四)持续更新

AI 视频生成和编辑工具 当今&#xff0c;视频已经成为最受欢迎的媒介之一。我们喜欢观看视频&#xff0c;但是制作高质量的视频需要耗费大量时间和精力。 无论你是内容创作者、专业视频编辑师&#xff0c;还是完全的新手&#xff0c;按照传统方式制作视频需要掌握各种知识、技…

【Maxwell】MySQL数据监听

背景 我们都知道随着业务的发展,监听数据库的数据变更及时性是必须的,虽然我们可以在入库之前进行处理,但是有个问题就是事务的一致性不好掌控,而且很多业务都是微服务的,那么不在一个微服务中,可能有需要跨服务去调用,那么此时直接去监听mysql的binlog来实现数据的操作…

这一篇Databinding应该可以帮助迅速上手吧

Databinding使用篇&#xff08;迅速上手&#xff09; 使用前需要在模块级别的build.gradle里面的android闭包里添加&#xff1a; dataBinding{enabled true}接着在layout文件中按下Alt 回车&#xff0c; 将布局转换成data binding layout即可&#xff0c;此时编译就会生成对…

【JAVAEE】创建线程的方式及线程的常用方法

目录 1.创建线程的四种方式 1.1继承Thread类 1.2实现Runnable接口 1.3匿名内部类 1.4lambda表达式 2.多线程的优势-增加运行速度 3.Thread类及常用方法 3.1构造方法 3.2常见属性 演示后台线程 演示线程是否存活 3.3线程中断 3.4线程等待-join() 3.5获取当前线程 …

23年5月高项备考学习笔记——信息系统管理

管理&#xff1a;监督系统的设计和结构 系统&#xff1a;提供蓝图 系统管理&#xff1a; 规划和组织&#xff1a;业务战略、组织机制、信息系统 业务战略&#xff1a; 总成本领先战略 差异性战略 专注化战略 设计和实施&#xff1a;战略转成需求&#xff0c;便管理&#xff1b…

5月5号软件资讯更新合集.....

Visual Studio Code 1.78 发布 VS Code 1.78 已发布&#xff0c;此版本一些主要亮点包括&#xff1a; 辅助功能改进 - 更好的屏幕阅读器支持、新的音频提示。 新的颜色主题 - “Modern” 浅色和深色主题默认设置。 配置文件模板 - Python、Java、数据科学等的内置模板。 新…

2023年6月DAMA-CDGA/CDGP数据治理认证报名请尽早啦!

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中&#xff01; 考试开放地区&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证开班时间&#xff1a;5月7日 DAMA认证为数据管理专业人士提供…

线上FullGC问题排查实践——手把手教你排查线上问题 | 京东云技术团队

作者&#xff1a;京东科技 韩国凯 一、问题发现与排查 1.1 找到问题原因 问题起因是我们收到了jdos的容器CPU告警&#xff0c;CPU使用率已经达到104% 观察该机器日志发现&#xff0c;此时有很多线程在执行跑批任务。正常来说&#xff0c;跑批任务是低CPU高内存型&#xff0c…

【马蹄集】第九周作业

第九周作业 目录 MT2125 一样的虫子MT2126 AB数对MT2127 权值计算MT2128 黑客小码哥MT2129 来给单词分类 MT2125 一样的虫子 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 有 N 只虫子&#xff0c;每只虫子有6条腿&#xff0c;每…