机器学习——深入浅出理解朴素贝叶斯算法
文章目录
- 引言
- 一、朴素贝叶斯定理概述
- 1.从贝叶斯定理说起
- 2.朴素贝叶斯的“朴素”之处
- 3.朴素贝叶斯算法的应用
- 二、朴素贝叶斯算法的优缺点
- 三、python代码实现案例
- 1.导入库
- 2.数据预处理
- 3.模型训练
- 4.模型评估
- 5.完整代码
- 四、总结
引言
朴素贝叶斯算法,一个听起来充满统计学气息的名字,却是机器学习领域最直观易懂的算法之一。它就像一位经验丰富的医生,凭借“朴素”的经验法则,快速高效地进行疾病诊断。今天,就让我们一起揭开朴素贝叶斯算法的神秘面纱,探索其背后的原理和应用。
一、朴素贝叶斯定理概述
1.从贝叶斯定理说起
要理解朴素贝叶斯,首先要了解它的理论基础——贝叶斯定理。贝叶斯定理描述了在已知某些条件下,某事件发生的概率如何更新。简单来说,就是利用新的信息,不断修正我们对事件的认知。
公式表示为:
P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) / P ( B ) P(A|B) = P(B|A) * P(A) / P(B) P(A∣B)=P(B∣A)∗P(A)/P(B)
其中:
- P(A|B):在事件 B 发生的条件下,事件 A 发生的概率(后验概率)
- P(B|A):在事件 A 发生的条件下,事件 B 发生的概率(似然度)
- P(A):事件 A 发生的先验概率
- P(B):事件 B 发生的边际概率
2.朴素贝叶斯的“朴素”之处
朴素贝叶斯算法基于一个非常朴素的假设:特征之间相互独立。也就是说,算法假设数据集中每个特征与其他特征都不相关。例如,在垃圾邮件分类中,算法会假设邮件中出现“免费”和“中奖”这两个词之间没有任何联系。
虽然这个假设在现实中往往不成立,但朴素贝叶斯算法却在许多实际应用中表现出色,尤其是在文本分类领域。
3.朴素贝叶斯算法的应用
朴素贝叶斯算法广泛应用于各种分类任务,例如:
- 垃圾邮件过滤: 判断一封邮件是否是垃圾邮件。
- 情感分析: 分析一段文本表达的情感是积极还是消极。
- 新闻分类: 将新闻文章自动分类到不同的主题类别,例如体育、科技、娱乐等。
- 医疗诊断: 根据患者的症状,判断其可能患有的疾病。
二、朴素贝叶斯算法的优缺点
优点:
- 简单易懂,易于实现。
- 训练速度快,对大规模数据集处理效率高。
- 对于高维数据表现良好。
- 对小规模数据也能取得不错的效果。
缺点:
- 特征独立性假设在现实中往往不成立,会影响模型精度。
- 对输入数据的表达形式比较敏感。
三、python代码实现案例
1.导入库
import pandas as pd
- pandas:用于数据处理和分析。
2.数据预处理
data = pd.read_csv("iris.csv",header=None)
data = data.drop(0,axis=1)
x = data.iloc[:,:-1]
y = data.iloc[:,-1]from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test = \train_test_split(x,y,test_size=0.2,random_state=42)
- 读取数据:使用pandas库读取iris.csv文件。数据集在下方链接中。
- 链接: iris.csv
- x:保留所有行,删除最后一列。
- y:只保留最后一列。
- train_test_split:对数据集进行划分
3.模型训练
from sklearn.naive_bayes import MultinomialNB #导入朴素贝叶斯分类器
#实例化贝叶斯分类器
classifier = MultinomialNB(alpha=1)
classifier.fit(x_train,y_train)
- 导入模型MultinomialNB
- 使用fit()函数训练模型
4.模型评估
train_predicted = classifier.predict(x_train)
print(metrics.classification_report(y_train, train_predicted))# 在完整测试集上评估模型
train_predicted1 =classifier.predict(x_test)
print(metrics.classification_report(y_test, train_predicted1))
- 打印分类报告
5.完整代码
import pandas as pddata = pd.read_csv("iris.csv",header=None)
data = data.drop(0,axis=1)
x = data.iloc[:,:-1]
y = data.iloc[:,-1]from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test = \train_test_split(x,y,test_size=0.2,random_state=42)from sklearn.naive_bayes import MultinomialNB #导入朴素贝叶斯分类器
#实例化贝叶斯分类器
classifier = MultinomialNB(alpha=1)
classifier.fit(x_train,y_train)from sklearn import metrics# 在小训练集上评估模型
train_predicted = classifier.predict(x_train)
print(metrics.classification_report(y_train, train_predicted))
# cm_plot(y_train, train_predicted).show()# 在完整测试集上评估模型
train_predicted1 =classifier.predict(x_test)
print(metrics.classification_report(y_test, train_predicted1))
# cm_plot(y_test, train_predicted1).show()
四、总结
朴素贝叶斯算法以其简单高效的特点,成为机器学习入门学习的经典算法。尽管其“朴素”的假设存在一定局限性,但在许多实际应用中依然表现出色。理解朴素贝叶斯算法,不仅能够帮助我们解决实际问题,更能为我们打开机器学习世界的大门,探索更广阔的算法天地。
希望这篇博客能够帮助你更好地理解朴素贝叶斯算法!
相关文章:
机器学习——深入浅出理解朴素贝叶斯算法
文章目录 引言一、朴素贝叶斯定理概述1.从贝叶斯定理说起2.朴素贝叶斯的“朴素”之处3.朴素贝叶斯算法的应用 二、朴素贝叶斯算法的优缺点三、python代码实现案例1.导入库2.数据预处理3.模型训练4.模型评估5.完整代码 四、总结 引言 朴素贝叶斯算法,一个听起来充满…...
TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)
TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave) 一、TCP三次握手(Three-way Handshake)二、TCP四次挥手(Four-way Wave)三、常见问题解答总结为什么三次握手不…...
【CF】Day9——Codeforces Round 953 (Div. 2) BCD
B. New Bakery 题目: 思路: 被标签害了,用什么二分( 很简单的思维题,首先如果a > b,那么全选a就行了,还搞啥活动 否则就选 b - a 天来搞活动,为什么? 首先如果我…...
【AI知识管理系统】(一)AI知识库工具测评
嘿,朋友们!🧐你们有没有想过,咱们平日里那些一闪而过的知识笔记、各种碎片化的idea,记录下来之后都是怎么管理的呀? 还有啊,咱们读过的那些书,大家会不会随手写点东西记录一下呢?📝要知道,如果不写的话,很可能过不了多久就全忘得一干二净啦。 😭那多年前记下的…...
Model Context Protocol 的生命周期
生命周期阶段 生命周期分为三个主要阶段: 初始化阶段 (Initialization) 客户端与服务器建立协议版本兼容性。交换并协商能力。分享实现细节。客户端必须发送 initialize 请求,包含支持的协议版本、客户端能力和客户端实现信息。服务器必须响应其自身能力…...
hot100_part_堆
不该要求事情一开始就是完美。 堆排序 【从堆的定义到优先队列、堆排序】 10分钟看懂必考的数据结构——堆_哔哩哔哩_bilibili 排序算法:堆排序【图解代码】_哔哩哔哩_bilibili 堆定义 堆必须是完全二叉树,从上到下,从左到右不能用空缺。…...
CoreData 调试警告:多个 NSEntityDescriptions 声明冲突的解决
概述 目前在苹果生态 App 的开发中,CoreData 数据库仍然是大部分中小应用的优先之选。不过,运行时 CoreData 常常产生各种“絮絮叨叨”的警告不禁让初学的秃头小码农们云里雾里。 这不,对于下面这一大段 CoreData 警告,大家是否一…...
【白话神经网络(二)】矩阵、CNN、RNN
全连接层 回顾前面学过的知识: 一个最简单的神经网络,就是ywxb 套上一个激活函数。 如果有多个输入,那就是多个w和x 如果有多个输出,那就再来一行公式,多一组w和b 要是神经元多了的话,公式密密麻麻的&…...
map容器练习:使用map容器识别统计单词个数
题目链接:单词识别_牛客题霸_牛客网 对map的使用不太熟悉的同学可以参考:超详细介绍map(multimap)的使用-CSDN博客 题目解析 输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕…...
DeepSeek 是否被过度吹捧了?
DeepSeek 作为中国人工智能领域的后起之秀,其技术进展引发了广泛关注和讨论。然而,DeepSeek 是否被过度吹捧仍然值得客观分析。 DeepSeek 的确取得了不错的成果,不过可能没有媒体宣传和人们想象中那么重大。它的轰动性主要在于以低廉的成本达…...
前端大文件上传(分片上传)与下载
文章目录 一、问题二、思路1、选择文件2、校验文件是否符合规范3、文件切片上传4、分片上传注意点5、大文件下载 一、问题 日常业务中难免出现前端需要向后端传输大型文件的情况,这时单次的请求不能满足传输大文件的需求,就需要用到分片上传 业务需求为…...
【最佳实践】Go 状态模式
设计思路 状态模式的核心在于将对象的行为封装在特定的状态类中,使得对象在不同的状态下表现出不同的行为。每个状态实现同一个接口,允许对象在运行时通过改变其内部状态对象来改变其行为。状态模式使得状态转换更加明确,并且易于扩展新的状…...
如何用Python批量将CSV文件编码转换为UTF-8并转为Excel格式?
在处理数据时,CSV文件格式常常用作数据的交换格式。不过,很多情况下我们会遇到编码问题,特别是当文件不是UTF-8编码时。为了更好地处理这些文件,可能需要将它们转换为UTF-8编码,并且将其转换为Excel格式,这…...
回顾Transformer,并深入讲解替代方案Mamba原理(图解)
一种语言建模中 Transformer 的替代方案 Transformer 架构是大语言模型(LLMs)成功的关键组成部分。几乎所有今天使用的大语言模型都采用了该架构,从开源模型如 Mistral 到闭源模型如 ChatGPT。 为了进一步改进大语言模型,新的架构…...
2025开源风险治理最佳实践︱新能源汽车车企开源风险治理案例
案例来源:悬镜安全 案例背景 当前我国新能源汽车产业蓬勃发展,智能网联趋势持续深化。汽车技术与工程核心逐渐从传统硬件层面转移到软件层面,踏上软件定义汽车(SDV)的变革之路。引用开源组件成为车企、Tier1、Tier2在软件开发过程中的常规操…...
Spring中Bean的自动装配
1.自动装配的核心概念 定义: Bean的自动装配是Spring框架中用于自动满足Bean依赖的一种机制。通过自动装配,Spring容器会在应用上下文中为某个Bean寻找其依赖的Bean,从而减少手动配置的工作量。其核心目标是减少配置代码,通过类型…...
一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)
引言 PostgreSQL 作为一款功能强大、开源的关系型数据库管理系统(RDBMS),以其高扩展性、SQL 标准兼容性以及丰富的功能特性,成为企业级应用的首选数据库之一。无论是开发、运维还是数据分析,掌握 PostgreSQL 的核心指…...
C#入门学习记录(三)C#中的隐式和显示转换
C#类型转换:隐式与显式转换的机制与应用 在C#的强类型体系中,数据类型转换是实现数据交互和算法逻辑的基础操作。当数值类型范围存在包含关系,或对象类型存在继承层次时,系统通过预定义的转换规则实现类型兼容处理。隐式转换&…...
【Linux网络-网络层】TCP与IP的关系+IP协议基本概念+网段划分+路由+IP分片与组装
网络层 在复杂的网络环境中确定一个合适的路径 一、TCP与IP的关系 TCP(传输控制协议)和IP(互联网协议)是互联网协议栈中的两个核心协议,属于不同的层级,分别在传输层和网络层,共同实现数据的可…...
【第K小数——可持久化权值线段树】
题目 代码 #include <bits/stdc.h> using namespace std;const int N 1e5 10;int a[N], b[N]; int n, m, len; int rt[N], idx; // idx 是点分配器struct node {int l, r;int s; } tr[N * 22];int getw(int x) {return lower_bound(b 1, b len 1, x) - b; }int bui…...
需要使用新应用以打开此ms-gamingoverlay链接怎么解决
要解决Windows系统提示“需要使用新应用以打开此ms-gamingoverlay链接”的问题,通常与系统自带的游戏工具栏(Game Bar)或Xbox相关应用缺失或配置错误有关。以下是综合多个来源的详细解决方法: 方法1:关闭游戏栏功能 这…...
五子棋小游戏-简单开发版
一、需求分析 开发一个基于 Pygame 库的五子棋小游戏,允许两名玩家在棋盘上轮流落子,当有一方达成五子连珠时游戏结束,显示获胜信息,并提供退出游戏和重新开始游戏的操作选项。 1.棋盘显示 : 显示一个 15x15 的五子棋…...
C语言内存函数讲解
(一)memcpy函数 这是memcpy函数的说明。它的头文件是string.h。函数原型是 void* memcpy(void* destination, const void* source, size_t num) 第一个参数是一个指向一个字符串的指针,第二个也是一样的。而第三个参数是复制的字节个数。这…...
2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题C卷
目录 总体规划 模块二:设备基础信息配置 模块三:网络搭建与网络冗余备份方案部署 模块四:移动互联网搭建与网优 模块五:出口安全防护与远程接入 总体规划 CII教育公司在进行企业大学信息化建设的过程中,为了保证北京校区、广州校区与本部校区的日常OA办公通信等关键业务,…...
《解锁Flutter:跨平台开发的未来之光》:此文为AI自动生成
《解锁Flutter:跨平台开发的未来之光》:此文为AI自动生成 Flutter:崭新时代的跨平台框架 在当今数字化浪潮中,移动应用已成为人们生活中不可或缺的一部分。无论是购物、社交、娱乐还是办公,我们都离不开各种手机应用…...
基于大数据的酒类商品数据可视化分析系统
【大数据】基于大数据的酒类商品数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统充分利用Python与Flask的强大后端处理能力,结合前端Layui框架࿰…...
【数学建模】一致矩阵的应用及其在层次分析法(AHP)中的性质
一致矩阵在层次分析法(AHP)中的应用与性质 在层次分析法(AHP)中,一致矩阵是判断矩阵的一种理想状态,它反映了决策者判断的完全合理性和一致性,也就是为了避免决策者认为“A比B重要,B比C重要,但是C又比A重要”的矛盾。…...
【YOLOv8】YOLOv8改进系列(7)----替换主干网络之LSKNet
主页:HABUO🍁主页:HABUO 🍁YOLOv8入门改进专栏🍁 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 【YOLOv8改进系列】: 【YOLOv8】YOLOv8结构解读…...
【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法
在DQL的基础查询中,我们已经学过了多表查询的一种:联合查询(union)。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先,我们想要查询emp表和stu表两个表,按照我们之前的知识栈,我们直接使用…...
练习-平方拆分问题(线性筛法-筛质数)
问题描述 小蓝非常热爱数学,一天老师给小蓝出了一道数学题,想锻炼锻炼小蓝的思维能力。题目是这样的:给定两个数 a 和 b,在 a 到 b(包括 a,b)之间所有数的平方当中,试问有几个数能够表示为 xy …...
CVE-2018-2628(使用 docker 搭建)
介绍: 是一个影响 Oracle WebLogic Server 的严重漏洞,属于 远程代码执行(RCE) 漏洞。以下是对该漏洞的详细分析: ● 漏洞类型: 远程代码执行(RCE) ● 影响范围:Oracle WebLogic Server 10.3.6.0, 12.1.3.0, 12.2.1.2…...
【深度学习与大模型基础】第5章-线性相关与生成子空间
线性相关是指一组向量中,至少有一个向量可以表示为其他向量的线性组合。具体来说,对于向量组 v1,v2,…,vn,如果存在不全为零的标量 c1,c2,…,cn使得: c1v1c2v2…cnvn0 则称这些向量线性相关。否则,它们线性无关。 举…...
使用 PaddlePaddle 官方提供的 Docker 镜像
CUDA版本高PaddlePaddle不支持时,可以使用 PaddlePaddle 官方提供的 Docker 镜像 1. 安装 Docker Desktop1.1 下载 Docker Desktop1.2 安装 Docker Desktop1.3 启用 WSL 2 或 Hyper-V1.4 启动 Docker Desktop1.5 Docker不运行解决方法 2. 拉取 PaddlePaddle Docker …...
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文阅读
一、TL;DR 为什么要这么做?预训练模型越来越大,比如GPT-3 175B训练独立变得越来越不可行方法:冻结预训练模型的权重,在Transformer架构的每一层中注入可训练的低秩分解矩阵效果:训练参数量减少10000x&…...
企业的应用系统
一、人力资源系统 负责管理员工信息,处理入职,离职,调岗。 1、一般员工的信息有电子档和纸质档两份。 电子档经常是excel文件。 2、高级的公司会建立一套Web应用系统。 3、实现的功能: 新员工入职登记 (登记信息一般是:…...
SpringBoot手动注册定时任务
一、背景 项目存在这样一个场景。程序启动过程中,在Spring的Bean组件注册完毕后,会初始化一些基础数据到数据库中,而项目中有部分定时任务需要依赖这些基础数据才能正常运行。如果直接使用Scheduled注解标注定时任务方法,会导致定…...
通过 Python 爬虫提高股票选股胜率
此贴为Python爬虫技术学习贴 在股票中,即便有了选股规则,从5000多只股票中筛选出符合规则的股票也是十分困难的,于是想通过爬虫来实现自动化的快速选股。全文用GP代替股票 实现方案 1、指定两套规则,第一套弱约束,第…...
InternVL:论文阅读 -- 多模态大模型(视觉语言模型)
更多内容:XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1)大型视觉编码器:InternViT-6B2)语言中间件:QLLaMA。3)训练策略(1)…...
代码随想录算法训练营第三十五天(20250303) |01背包问题 二维,01背包问题 一维,416. 分割等和子集 -[补卡20250316]
01背包问题 二维 链接 遍历物品没有大小顺序要求重点是模拟,推导出递推公式 #include <iostream> #include <vector>int main(){int m, n;std::cin>>m>>n;std::vector<int> weight(m,0),value(m,0);for(int i{0}; i<m; i){std:…...
RGV调度算法(三)--遗传算法
1、基于时间窗 https://wenku.baidu.com/view/470e9fd8b4360b4c2e3f5727a5e9856a57122693.html?_wkts_1741880736197&bdQuery%E7%8E%AF%E7%A9%BF%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95 2.2019年MathorCup高校数学建模挑战赛B题 2019-mathorcupB题-环形穿梭机调度模型&a…...
并发编程-
一、简述 线程:线程是cpu可执行的最小单位,而进程是操作系统可分配的最小资源单位。一个进程中可以有多个线程。 线程的五个状态: 新建(new Thread()) 就绪 (thread.start()) 运行(…...
Mac中nvm切换node版本失败,关闭终端再次打开还是之前的node
Mac中使用 nvm 管理 node 版本,在使用指令:nvm use XXX 切换版本之后。 关闭终端,再次打开,输入 node -v 还是得到之前的 node 版本。 原因: 在这里这个 default 中有个 node 的版本号,使用 nvm use 时&a…...
C语言(25)
一.数据在内存中的存储 1.整数在内存中的存储 整数在内存中以二进制的形式储存,分别为原码,补码,反码 有符号的整数,在上述三种形式都有符号位和数值位两个部分,符号位为0是正数,1是负数,最高…...
HTML、CSS
什么是HTML、CSS HTML结构标签及特点 CSS引入方式 CSS颜色表示形式: CSS引入方式、颜色表示、颜色属性 CSS选择器 超链接...
c#:主窗体与子控件之间的数据传递:基于事件和委托的实现
1. 概述 在WPF中,主窗体与子控件之间的数据传递通常通过以下两种方式实现: 事件(Event):主窗体触发事件,子控件订阅事件并接收数据。 委托(Delegate):通过委托将子控件…...
Dynamics 365 启用用户安全角色变更的审核功能
D365自身的审核功能这里就不说了,是一个很古老的功能,用过D365的人应该都知道,今天要说的是用户安全角色变更的审核记录。 很多人用系统的审核功能,更多的是用来追踪用户的登录记录,或者记录的修改记录。 而实际的项目…...
MyBatis注解
MyBatis 的注解(Annotations)提供了一种简洁的方式来配置 SQL 映射,而无需使用 XML 文件。通过在 Mapper 接口的方法上使用注解,可以直接在 Java 代码中定义 SQL 语句和相关映射。这种方式使得代码更加集中和易于维护,…...
1.Windows+vscode+cline+MCP配置
文章目录 1.简介与资源2.在windows中安装vscode及Cline插件1. 安装vscode2. 安装Cline插件3. 配置大语言模型3. 配置MCP步骤(windows) 1.简介与资源 MCP官方开源仓库 MCP合集网站 参考视频 2.在windows中安装vscode及Cline插件 1. 安装vscode 2. 安装Cline插件 Cline插件…...
94.HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils 文章目录 HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils1. 动画系…...
Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)
一、Pandas库 1.1、概念 Pandas是一个开源的、用于数据处理和分析的Python库,特别适合处理表格类数 据。它建立在NumPy数组之上,提供了高效的数据结构和数据分析工具,使得数据操作变得更加简单、便捷和高效。 Pandas 的目标是成为 Python 数据…...