【python代码实现】朴素贝叶斯分类算法

article/2025/8/25 14:53:45

目录

  • 前置知识
    • 1、概念
    • 2、算法原理
      • 2.1、条件概率
      • 2.2、全概率
      • 2.3、先验概率
      • 2.4、后验概率
  • 朴素贝叶斯分类算法
    • 1、构建数据集
    • 2、分类概率
    • 3、条件概率
    • 4、先验概率

前置知识

1、概念

上一篇我们讲到的决策树算法,是反映了一种非常明确、固定的判断选择过程,即某一判断条件的结果确定了,则接下来的决策路径也就确定了。但在很多实际问题中,某一个判定条件满足与否,并不能百分之百地支持做出某个决策,往往只在一定程度上影响最终决策。

而这个一定程度,在数学上可以用概率来量化。贝叶斯分类算法是一种有监督的分类算法,以坚实的数学理论(贝叶斯公式)作为支撑,实现简单,在大量样本下有较好的表现。

2、算法原理

2.1、条件概率

条件概率,是指在B事件发生的前提下,A事件发生的可能性。记为:P(A|B) = P(AB)/P(B)

比如说,假设每年52周中,其中有40周的周一因为学生要上学,会导致这40周的周一有80%的可能性发生早高峰拥堵。A事件表示周一早上堵车,B1表示这个周一处于学期中,则P(A|B1) = 0.8;剩下寒暑假期的12周的周一发生早高峰拥堵的可能性为30%,用B2表示这个周一处于寒暑假期中,则P(A|B2)=0.3

2.2、全概率

由2.1知,一个周一不是处于学期中就是处于假期中,因此时间B1、B2可以完全覆盖所有的周一,且P(B1)=40/52、P(B2)=12/52,P(B1)+P(B2)=1。

由此可以算出周一堵车概率:P(A)=P(AB1)+P(AB2)=40/52*80%+12/52*30%=68.46%,这就是A事件发生的全概率。

2.3、先验概率

2.1中,“学期中周一早上堵车概率为80%”和“寒暑假中周一早上堵车概率为30%”这两个结论是根据以往数据统计分析得到的概率,称之为先验概率,比如掷骰子实验中,正面为1的概率是1/6也是先验概率

2.4、后验概率

后验概率是指在得到“结果”信息后重新修正的概率,后验概率的计算要以先验概率为基础。从计算角度来看,事件还未发生要求求其发生的可能性,是先验概率;事件已发生,要求求这件事发生的原因是由某一个事件引起的可能性,是后验概率。

如2.1例子中,P(B1)、P(B2)、P(A|B1)、P(A|B2)均为已知的先验概率。如果求某个周一出行堵车,估计这个周一是处于学期中的概率,这就是一个后验概率。

P(B1|A) = P(B1A)/P(A) = 40/50*80%/68.46% = 89.89%。这个结果也跟我们的经验相符合,某个周一堵车,则该周一处于学期中的概率更大。

在这里插入图片描述
这就是贝叶斯公式,实现了先验概率和后验概率之间的相互演算,这也是贝叶斯分类算法的基本。

朴素贝叶斯分类算法

1、构建数据集

本文所用数据与上一篇分类算法中的数据一致:
【python代码实现】决策树分类算法

2、分类概率

# 计算样本数据集分类标签为Y/N的概率
# dataset为样本数据和分类结果;cls_val是分类字符,Y/N
def prob(dataset,cls_val):cnt=0.0for e in dataset:if e[4]==cls_val:cnt+=1return cnt/len(dataset)

prob函数用于计算样本数据中,分类结果为Y或者是N的频率,以分类标签出现的频率作为分类结果的概率:

py = prob(ds1,'Y')
print("分类为Y的概率:",py)
pn = prob(ds1,'N')
print("分类为N的概率:",pn)

分类为Y的概率: 0.6428571428571429
分类为N的概率: 0.35714285714285715

3、条件概率

# 计算条件概率
# dataset为样本数据和分类结果;cls_val是分类字符,Y/N;attr_index是属性的序号;attr_val是属性的取值
def conditionp(dataset,cls_val,attr_index,attr_val):cnt1=0.0cnt2=0.0for e in dataset:if e[4]==cls_val:cnt1+=1if e[attr_index]==attr_val:cnt2+=1return cnt2/cnt1

计算条件概率,即在Y(或者N)分类结果的条件下,某一个属性(age、income、job、credit)出现的概率,例如:

print("计算分类为Y时,age属性三个取值的条件概率:")
pa0y = conditionp(ds1,'Y',0,0)
print("条件概率P(age<30|Y) = ",pa0y)
pa1y = conditionp(ds1,'Y',0,1)
print("条件概率P(30<=age<=40|Y) = ",pa1y)
pa2y = conditionp(ds1,'Y',0,2)
print("条件概率P(age>40|Y) = ",pa2y)

计算分类为Y时,age属性三个取值的条件概率:
条件概率P(age<30|Y) = 0.2222222222222222
条件概率P(30<=age<=40|Y) = 0.4444444444444444
条件概率P(age>40|Y) = 0.3333333333333333

4、先验概率

# 利用后验概率计算先验概率
# dataset为样本数据和分类结果;testlist是新样本数据列表;cls_y、cls_n是分类字符,Y/N;
def nb(dataset,testlist,cls_y,cls_n):py=prob(dataset,cls_y)pn=prob(dataset,cls_n)for i,val in enumerate(testlist):py*=conditionp(dataset,cls_y,i,val)pn*=conditionp(dataset,cls_n,i,val)return {cls_y:py,cls_n:pn}

在计算得到分类结果为Y/N的概率后,计算测试样本中每个属性取值所对应的后验概率,其乘积的大小也就反映了预测分类Y/N时先验概率的大小:

tsvec = [0,0,1,1]
prob = nb(ds1,tsvec,'Y','N')
print("测试结果:",prob)
tsvec1 = [0,2,0,1]
prob1 = nb(ds1,tsvec1,'Y','N')
print("测试结果1:",prob1)

测试结果: {‘Y’: 0.010582010582010581, ‘N’: 0.005142857142857143}
测试结果1: {‘Y’: 0.003527336860670194, ‘N’: 0.04114285714285714}

可以看出其分类结果的较大可能性与决策树分类算法一致!


http://chatgpt.dhexx.cn/article/l0QjYbRy.shtml

相关文章

分类算法-KNN(原理+代码+结果)

KNN&#xff0c;即K最邻近算法&#xff0c;是数据挖掘分类技术中比较简单的方法之一&#xff0c;简单来说&#xff0c;就是根据“最邻近”这一特征对样本进行分类。 1、K-means和KNN区别 K-means是一种比较经典的聚类算法&#xff0c;本质上是无监督学习&#xff0c;而KNN是分…

伯努利贝叶斯分类算法

贝叶斯分类的核心概念&#xff1a; 我们对某件事情的判断首先有一个概率&#xff0c;这个概率称为先验概率。先验概率时根据经验总结出来的概率值&#xff0c;如果首先没有经验&#xff0c;那么可以将先验概率设置为50%&#xff0c;随着后面事情的发展&#xff0c;再调整先验概…

【机器学习原理】KNN分类算法

上一篇&#xff1a;Logistic回归分类算法 文章目录 一、KNN分类算法&#xff1a;用多数表决进行分类1. 用“同类相吸”的办法解决分类问题可视化下的分类问题 2. KNN分类算法的基本方法&#xff1a;多数表决3. 表决权问题4. KNN的具体含义 KNN分类算法原理1. KNN分类算法的基本…

Python实现分类算法

前言&#xff1a;出自于学校课程数据挖掘与分析布置的实验小作业&#xff0c;案例经典&#xff0c;代码注释较全&#xff0c;供大家参考。 题目&#xff1a; 现有西瓜挑选数据文件&#xff1a;dataset.txt&#xff0c;编程实现朴素贝叶斯算法&#xff0c;并判断有如下特征的瓜…

贝叶斯分类算法

贝叶斯分类是一类分类算法的总称&#xff0c;这类算法均以贝叶斯定理为基础&#xff0c;故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单&#xff0c;也是常见的一种分类方法。这篇文章我尽可能用直白的话语总结一下我们学习会上讲到的朴素贝叶斯分类算法&#…

基于Python实现五大常用分类算法(原理+代码)

读&#xff1a; 在机器学习和统计中&#xff0c;分类算法通过对已知类别训练集的计算和分析&#xff0c;从中发现类别规则并预测新数据的类别。分类被认为是监督学习的一个实例&#xff0c;即学习可以获得正确识别的观察的训练集的情况。 实现分类的算法&#xff0c;特别是在具…

EIGRP综合实验解析

实验要求 1.R1为ISP,只能配置IP地址 2.R1与R2之间为PPP封装&#xff0c;使用CHAP认证&#xff0c;R1为主认证方 3.R2-R8地址为172.16.0.0/16 4.R4的S1/1口带宽为800K。R4到R2环回为非等开销负载均衡 5.保证更新安全&#xff0c;减少路由条目数量 6.R6到达R8环回通过R7进行 7.R2…

EIGRP协议

EIGRP是距离矢量路由协议&#xff0c;但又非距离矢量那样路由完全是别人告诉&#xff0c;而是通过维护3张表自己对比计算后放入路由表。同样会受水平分割影响。 EIGRP建邻居过程 第一步&#xff1a;路由器R1和R2接口配置EIGRP后&#xff0c;在相应接口上向外组播发送Hello包…

EIGRP总结

EIGRP 增强内部网关路由协议 无类别距离矢量IGP协议&#xff1b; 增量更新—仅触发更新&#xff0c;无周期更新----更新量小&#xff08;DV&#xff09;&#xff0c;可靠性高&#xff08;RTP&#xff09;&#xff0c;保活机制&#xff08;hello&#xff09; 复合度量—多个参数…

EIGRP

EIGRP增强型网关路由协议 基本内容&#xff1a; Cisco私有&#xff1b;无类别距离矢量协议&#xff1b;跨层封装协议&#xff0c;封装于网络层–协议号88&#xff1b;组播更新&#xff1a;224.0.0.10 &#xff1b;支持非等开销负载均衡&#xff1b;增量更新&#xff08;部分更…

思科EIGRP配置及基本讲解

思科EIGRP配置及基本讲解 什么是EIGRP EIGRP全称 [增强型内部网关路由选择协议] 是思科自主研发的动态路由选择协议&#xff0c;按类型划分是一款IGP协议&#xff0c;距离矢量协议&#xff0c;是一款基于传闻的协议。 EIGRP是思科的私有协议&#xff0c;直到13年&#xff0c;此…

EIGRP协议的配置

EIGRP(Enhanced Interior Gateway Routing Protocol&#xff0c;增强型内部网关路由协议)是Cisco公司开发的一个平衡混合型路由协议&#xff0c;它融合了距离向量和链路状态两种路由协议的优点&#xff0c;支持IP&#xff0c;IPX和ApplleTalk等多种网络层协议。由于TCP/IP是当今…

网络篇 EIGRP协议-27

目录 一、EIGRP的基本概述 二、EIGRP的特点 三、EIGRP的四种重要技术 四、EIGRP的相关术语 五、EIGRP的三张表 1.路由表 2.邻居表 3.拓扑表 六、EIGRP的五个分组 1.Hello分组&#xff1a; 2.Update更新分组&#xff1a; 3.Query查询分组&#xff1a; 4.Reply应答分…

EIGRP(Enhanced Interior Gateway Routing Protocol,增加型内部网关路由协议)

EIGRP是Cisco公司于1992年开发的一个无类别距离矢量路由协议&#xff0c;它融合了距离矢量和链路状态两种路由协议的优点。EIGRP是Cisco的专有路由协议&#xff0c; 是Cisco的IGRP协议的增加版。IGRP是一种有类距离矢量协议&#xff0c;Cisco IOS 12.3版以后不再支持该协议。 E…

EIGRP理论详解及基础实验

EIGRP:( Enhanced Interior Gateway Routing Protocol )增强型内部网关路由协议 EIGRP 是一种Cisco专用协议,同时具备链路状态和距离矢量路由协议的优点.只发送变化后的信息(这类似于链路状态协议),同时只将这些信息发送给邻接路由器(这类似于距离矢量协议). 距离矢量路由协议…

CSMA协议

介质访问控制 CSMA协议 1-坚持CSMA 非坚持CSMA p-坚持CSMA 三种CSMA对比总结

3.4.2 CSMA/CD协议

为了解决各站点争用总线的问题&#xff0c;共享总线使用了一种专用协议CSMA/CD&#xff0c;它是载波监听多址接入/碰撞检测&#xff08;Carrier Sence Multiple Access Collision Detection&#xff09;的英文缩写。 假设站点C要发送帧&#xff0c;它首先进行载波监听&#xff…

关于CSMA/CA和CSMA/CD的区别

转载自&#xff1a;https://www.cnblogs.com/aixin0813/p/3289183.html 1.1 载波侦听多路访问 根据具体的监听/发送策略&#xff0c;可将CSMA分为&#xff1a; 非持续CSMA&#xff08;英语&#xff1a;non-persistent CSMA&#xff09; 当要发送帧的设备侦听到线路忙或发生冲…

计算机网络:随机访问介质访问控制之CSMA/CA协议

CSMA/CD协议已成功应用于使用有线连接的局域网&#xff0c;但在无线局域网环境下&#xff0c;却不能简单地搬用CSMA/CD协议&#xff0c;特别是碰撞检测部分。主要有两个原因: 1&#xff09;接收信号的强度往往会远小于发送信号的强度&#xff0c;且在无线介质上信号强度的动态…

CSMA/CD协议详解

一、协议背景 最早的以太网是总线网络&#xff0c;当一台计算机发送数据时&#xff0c;总线上所有计算机都能检测到这个数据(广 播通讯方式)。为了通讯的简便&#xff0c;传统总线型以太网采取了以下措施&#xff1a; 1.提供的服务为不可靠的交付&#xff1a; (1.采用较为灵活…