朴素贝叶斯分类

news2024/11/26 3:33:42

一、朴素贝叶斯法原理

1.基本原理

  朴素贝叶斯法(Naive Bayes)是一种基础分类算法,它的核心是贝叶斯定理+条件独立性假设。贝叶斯定理描述的是两个条件概率之间的关系,对两个事件A和B,由乘法法则易知 ( A ∩ B ) = P ( A ) P ( B │ A ) = P ( B ) P ( A │ B ) (A∩B)=P(A)P(B│A)=P(B)P(A│B) (AB)=P(A)P(BA)=P(B)P(AB)
  贝叶斯定理就是对这个关系式的变形,即
P ( B │ A ) = P ( B ) P ( A ∣ B ) P ( A ) P(B│A)=\frac{P(B)P(A|B)}{P(A)} P(BA)=P(A)P(B)P(AB)
  若把样本特征和类别作为对应的条件和条件概率,则贝叶斯定理可以用来解决分类问题。如对样本 x = ( x 1 , x 2 , . . . , x n ) x=\left( x_1,x_2,...,x_n \right) x=(x1,x2,...,xn),所属类别为 y y y,那么该特征下对应该类别的概率代入贝叶斯公式就是 P ( y ∣ x 1 , x 2 , . . . , x n ) = P ( y ) P ( x 1 , x 2 , . . . , x n ∣ y ) P ( x 1 , x 2 , . . . , x n ) P(y|x_1,x_2,...,x_n)=\frac{P(y)P(x_1,x_2,...,x_n|y)}{P(x_1,x_2,...,x_n)} P(yx1,x2,...,xn)=P(x1,x2,...,xn)P(y)P(x1,x2,...,xny)
  贝叶斯分类法的思想就是计算样本特征对应于各类别的概率,以概率最大的作为分类输出。分母部分是特征的联合概率,可以进一步由全概率公式展开;分子部分由于含复杂的条件概率,使得直接的计算较复杂,因此这里做一个条件独立性假设,即认为样本的各维特征间是相互独立的,这是一个较强的假设,朴素贝叶斯也由此得名。在该条件之下,分子便可化为 P ( y ) ∏ i = 1 n P ( x i ∣ y ) P(y)\prod_{i=1}^{n}P(x_i|y) P(y)i=1nP(xiy)
  注意到,在用于分类决策时,分母部分的值对于所有的类别都是相同的,要找出最大概率对应的类别,只考察分子即可。因此,朴素贝叶斯分类器表示为 y ^ = arg ⁡ m a x y k P ( y k ) ∏ i = 1 n P ( x i ∣ y k ) \hat{y}=\arg max_{y_k}{P(y_k)\prod_{i=1}^{n}P(x_i|y_k)} y^=argmaxykP(yk)i=1nP(xiyk)

2.平滑处理

  在离散特征的情形之下进行分类输出的概率计算,可能会出现概率为0的情况,如随机变量观测值的某一维并未在训练集中出现,那么它所属的条件概率为0,致使对应类别的后验概率为0,从而使分类产生偏差,这是不合理的,因此需进行一定的平滑处理。具体,就是在频率计算时,对每组统计的频数加上一个常数。
先验概率: P ( y k ) = ∑ i = 1 N I ( y i = y k ) + λ N + K λ P(y_k)=\frac{\sum_{i=1}^{N}{I(y_i=y_k)+\lambda}}{N+K\lambda} P(yk)=N+Kλi=1NI(yi=yk)+λ
条件概率: P ( x i ∣ y k ) = ∑ i = 1 N I ( x i , y i = y k ) + λ ∑ i = 1 N I ( y i = y k ) + S λ P(x_i|y_k)=\frac{\sum_{i=1}^{N}{I(x_i,y_i=y_k)+\lambda}}{\sum_{i=1}^{N}{I(y_i=y_k)+S\lambda}} P(xiyk)=i=1NI(yi=yk)+Sλi=1NI(xi,yi=yk)+λ
  当 λ = 1 \lambda=1 λ=1时,称为拉普拉斯平滑(Laplace smoothing)。

3.三个基本模型

  根据特征随机变量的类型,分为伯努利朴素贝叶斯、多项式朴素贝叶斯、高斯朴素贝叶斯三种基本模型。
(1) 伯努利朴素贝叶斯
  若特征随机变量符合的是离散型的二项分布,也就是仅布尔值,那么此时的模型称为伯努利朴素贝叶斯。从统计的角度,分类器表达式分子中的连乘运算对应于n次独立试验。
(2) 多项式朴素贝叶斯
  若特征随机变量符合的是离散型的多项分布,那么此时的模型称为多项式朴素贝叶斯。同样地,分类器表达式分子中的连乘运算对应于n次独立试验。
(3) 高斯朴素贝叶斯
  若特征随机变量是连续型的(如身高、体重),即假定它是符合高斯分布的(正态分布),概率的计算就是由已知的数据计算出高斯分布的两个参数(均值、标准差),进而由密度函数确定对应的取值,代入公式计算。同样地,分类器表达式分子中的连乘运算对应于n次独立试验。

二、示例

  这里对多项式朴素贝叶斯分类模型举例。
训练集:

样本特征向量X类别Y
[1, 1, 2, 3]1
[1, 2, 2, 4]2
[1, 2, 3, 3]2
[1, 2, 4, 4]3
[1, 3, 3, 4]3
[2, 2, 3, 4]1
[2, 1, 3, 3]3

测试样本:[1, 2, 3, 4]

则类别集合为 Y ∈ { 1 , 2 , 3 } Y\in\left\{ 1,2,3 \right\} Y{1,2,3} ,
P ( Y = 1 ) = 2 7 P(Y=1)=\frac{2}{7} P(Y=1)=72, P ( Y = 2 ) = 2 7 P(Y=2)=\frac{2}{7} P(Y=2)=72, P ( Y = 3 ) = 3 7 P(Y=3)=\frac{3}{7} P(Y=3)=73,
P ( X 1 = 1 ∣ Y = 1 ) = 1 2 P\left( X_1=1|Y=1 \right)=\frac{1}{2} P(X1=1∣Y=1)=21, P ( X 2 = 2 ∣ Y = 1 ) = 1 2 P\left( X_2=2|Y=1 \right)=\frac{1}{2} P(X2=2∣Y=1)=21, P ( X 3 = 3 ∣ Y = 1 ) = 1 2 P\left( X_3=3|Y=1 \right)=\frac{1}{2} P(X3=3∣Y=1)=21,
P ( X 4 = 4 ∣ Y = 1 ) = 1 2 P\left( X_4=4|Y=1 \right)=\frac{1}{2} P(X4=4∣Y=1)=21, P ( X 1 = 1 ∣ Y = 2 ) = 1 P\left( X_1=1|Y=2 \right)=1 P(X1=1∣Y=2)=1, P ( X 2 = 2 ∣ Y = 2 ) = 1 P\left( X_2=2|Y=2 \right)=1 P(X2=2∣Y=2)=1,
P ( X 3 = 3 ∣ Y = 2 ) = 1 2 P\left( X_3=3|Y=2 \right)=\frac{1}{2} P(X3=3∣Y=2)=21, P ( X 4 = 4 ∣ Y = 2 ) = 1 2 P\left( X_4=4|Y=2 \right)=\frac{1}{2} P(X4=4∣Y=2)=21, P ( X 1 = 1 ∣ Y = 3 ) = 2 3 P\left( X_1=1|Y=3 \right)=\frac{2}{3} P(X1=1∣Y=3)=32,
P ( X 2 = 2 ∣ Y = 3 ) = 1 3 P\left( X_2=2|Y=3 \right)=\frac{1}{3} P(X2=2∣Y=3)=31, P ( X 3 = 3 ∣ Y = 3 ) = 2 3 P\left( X_3=3|Y=3 \right)=\frac{2}{3} P(X3=3∣Y=3)=32, P ( X 4 = 4 ∣ Y = 3 ) = 2 3 P\left( X_4=4|Y=3 \right)=\frac{2}{3} P(X4=4∣Y=3)=32,

归属于类别1的概率:
P ( Y = 1 ) P ( X 1 = 1 ∣ Y = 1 ) P ( X 2 = 2 ∣ Y = 1 ) P ( X 3 = 3 ∣ Y = 1 ) P ( X 4 = 4 ∣ Y = 1 ) = 2 7 ⋅ 1 2 ⋅ 1 2 ⋅ 1 2 ⋅ 1 2 = 1 56 \begin{equation*} \begin{aligned} &P(Y=1)P(X_1=1|Y=1)P(X_2=2|Y=1)P(X_3=3|Y=1)P(X_4=4|Y=1)\\ &=\frac{2}{7}\cdot\frac{1}{2}\cdot\frac{1}{2}\cdot\frac{1}{2}\cdot\frac{1}{2}\\ &=\frac{1}{56} \end{aligned} \end{equation*} P(Y=1)P(X1=1∣Y=1)P(X2=2∣Y=1)P(X3=3∣Y=1)P(X4=4∣Y=1)=7221212121=561
归属于类别2的概率:
P ( Y = 2 ) P ( X 1 = 1 ∣ Y = 2 ) P ( X 2 = 2 ∣ Y = 2 ) P ( X 3 = 3 ∣ Y = 2 ) P ( X 4 = 4 ∣ Y = 2 ) = 2 7 ⋅ 1 ⋅ 1 ⋅ 1 2 ⋅ 1 2 = 1 14 \begin{equation*} \begin{aligned} &P(Y=2)P(X_1=1|Y=2)P(X_2=2|Y=2)P(X_3=3|Y=2)P(X_4=4|Y=2)\\ &=\frac{2}{7}\cdot1\cdot1\cdot\frac{1}{2}\cdot\frac{1}{2}\\ &=\frac{1}{14} \end{aligned} \end{equation*} P(Y=2)P(X1=1∣Y=2)P(X2=2∣Y=2)P(X3=3∣Y=2)P(X4=4∣Y=2)=72112121=141
归属于类别3的概率:
P ( Y = 3 ) P ( X 1 = 1 ∣ Y = 3 ) P ( X 2 = 2 ∣ Y = 3 ) P ( X 3 = 3 ∣ Y = 3 ) P ( X 4 = 4 ∣ Y = 3 ) = 3 7 ⋅ 2 3 ⋅ 1 3 ⋅ 2 3 ⋅ 2 3 = 8 189 \begin{equation*} \begin{aligned} &P(Y=3)P(X_1=1|Y=3)P(X_2=2|Y=3)P(X_3=3|Y=3)P(X_4=4|Y=3)\\ &=\frac{3}{7}\cdot\frac{2}{3}\cdot\frac{1}{3}\cdot\frac{2}{3}\cdot\frac{2}{3}\\ &=\frac{8}{189} \end{aligned} \end{equation*} P(Y=3)P(X1=1∣Y=3)P(X2=2∣Y=3)P(X3=3∣Y=3)P(X4=4∣Y=3)=7332313232=1898

归属于类别2的概率最大,因此分类输出为2。

三、Python实现

(1) 伯努利朴素贝叶斯

'''
sklearn实现伯努利朴素贝叶斯分类。
'''

import numpy as np
from sklearn.naive_bayes import BernoulliNB

## 1.构造训练集和待测样本
#训练集数据
train_x=[
    [1, 1, 1, 1],
    [1, 1, 1, 1],
    [1, 1, 1, 0],
    [1, 1, 0, 0],
    [1, 0, 0, 0],
    [0, 0, 0, 0]
]
#训练集数据标签
train_y=[
    1,
    2,
    2,
    3,
    3,
    1
]

#待测样本
test_x = [
    [1, 2, 1, 2],
    [1, 1, 2, 2]
]

#转为array形式
train_x = np.array(train_x)
train_y = np.array(train_y)
test_x = np.array(test_x)

## 2.定义分类器
bnbClf = BernoulliNB()

## 3.训练
Fit_bnbClf = bnbClf.fit(train_x,train_y)

## 4.预测
pre_y = Fit_bnbClf.predict(test_x)

print('预测类别:')
print(pre_y)

在这里插入图片描述

(2) 多项式朴素贝叶斯

'''
sklearn实现多项式朴素贝叶斯分类。
'''

import numpy as np
from sklearn.naive_bayes import ComplementNB

## 1.构造训练集和待测样本
#训练集数据
train_x=[
    [1, 1, 2, 3],
    [1, 2, 2, 4],
    [1, 2, 3, 3],
    [1, 2, 4, 4],
    [1, 3, 3, 4],
    [2, 2, 3, 4],
    [2, 1, 3, 3]
]
#训练集数据标签
train_y=[
    1,
    2,
    2,
    3,
    3,
    1,
    3
]


#待测样本
test_x = [
    [1, 2, 3, 4],
    [1, 1, 1, 4]
]

#转为array形式
train_x = np.array(train_x)
train_y = np.array(train_y)
test_x = np.array(test_x)

## 2.定义分类器
cnbClf = ComplementNB()

## 3.训练
Fit_cnbClf = cnbClf.fit(train_x,train_y)

## 4.预测
pre_y = Fit_cnbClf.predict(test_x)

print('预测类别:')
print(pre_y)

在这里插入图片描述

(3) 高斯朴素贝叶斯

'''
sklearn实现高斯朴素贝叶斯分类。
'''

import numpy as np
from sklearn.naive_bayes import GaussianNB

#训练集数据
train_x=[
    [1.1, 2, 3, 4],
    [1, 2.2, 3, 4],
    [1, 2, 3.3, 4],
    [1, 2, 3, 4.4],
    [1.1, 2.2, 3, 4],
    [1, 2, 3.3, 4.4]
]
#训练集数据标签
train_y=[
    1,
    2,
    2,
    3,
    3,
    1
]

#待测样本
test_x = [
    [1.2, 2, 3, 4],
    [1, 2.3, 3, 4]
]

#转为array形式
train_x = np.array(train_x)
train_y = np.array(train_y)
test_x = np.array(test_x)

## 2.定义分类器
gnbClf = GaussianNB()

## 3.训练
Fit_gnbClf = gnbClf.fit(train_x,train_y)

## 4.预测
pre_y = Fit_gnbClf.predict(test_x)

print('预测类别:')
print(pre_y)

在这里插入图片描述


End.

pdf下载

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

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

相关文章

离散数学与组合数学-06特殊的图

文章目录离散数学与组合数学-06特殊的图6.1 欧拉图6.1.1 哥尼斯堡七桥问题6.1.2 欧拉图的定义6.1.3 无向欧拉图的判定6.1.4 有向欧拉图的判定6.1.5 一笔画问题6.1.6 求回路6.2 哈密顿图6.2.1 周游世界问题6.2.2 哈密顿图的定义6.2.3 哈密顿图的必要条件6.2.4 哈密顿图的充分条件…

Hadoop基础之《(5)—MapReduce概述》

一、什么是MapReduce MapReduce将计算过程分为两个阶段:Map和Reduce。 1、Map阶段并行处理输入数据。 2、Reduce阶段对map结果进行汇总。 二、结构图 三、HDFS、Yarn、MapReduce三者之间的调用关系 HDFS三台服务器,第一台上有DataNode和NameNode。第二…

如何像程序员一样思考

如何像程序员一样思考 全世界越来越多的人发现了软件开发的乐趣和兴奋。一个你构建东西的职业,去打破它们,然后再把它们构建得更好。您可以经常设定自己的工作时间并与来自全球各地的客户一起工作的职业。一个可以自己当老板的职业?编程在 2…

android12.0(S) Launcher3 导入 AndroidStudio 调试编译

验证环境 aosp 12.0 源码,分支 android-12.0.0_r3 可以参考之前写的 android12.0(S) Pixel 3XL (QCOM 845) 编译刷机 AndroidStudio 版本 Android Studio Arctic Fox | 2020.3.1 Patch 4 gradle 版本 gradle-7.0.2-bin.zip gradle:7.0.4 二手 Pixel 3 XL一台可直…

[WUSTCTF2020]颜值成绩查询(布尔注入)

目录 信息收集 脚本 reference 信息收集 输入1出现固定的回显,输入2-4出现乱码 Hi admin, your score is: 100 输入其他特殊字符无回显,也无报错回显 采用布尔注入进行判断 布尔注入原理 代码存在SQL注入漏洞,然而页面即不会回显数据&am…

【C++算法图解专栏】一篇文章带你掌握尺取法(双指针)

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解,也欢迎大佬们一起交流~ 📚专栏地址:https://blog.csdn.net/Newin…

java spring IOC xml方式工厂Bean操作

spring中有两种Bean 第一种 普通 Bean 就是我们在配置文件中 定义的类对象 创建bean 并定义相关的id和声明类对象 普通bean的特点在于 在配置文件中定义的类型 也就是返回类型 就比如 你定义的是一个 book类的类型 那你这个bean返回的 也比如是个book类型的对象 第二种 是在工…

模拟实现vector/迭代器失效问题

对于STL,我们不仅学会使用STL,还要了解其底层原理,这样一来,我们就能知道什么时候用string好,什么时候用vector,什么时候用list,哪种方法效率高等等。其次了解了STL的底层原理,也助于我们的C功力…

RTF、RIR、Steering Vector傻傻分不清

RTF: Relative transfer function,相对传递函数RIR: Room impulse response,空间冲击响应Steering vector: 导向矢量场景问题定义:空间中存在I个麦克风和J个声源,麦克风采集到的信号其中,麦克i的信号其中表…

一起自学SLAM算法:9.1 ORB-SLAM2算法

连载文章,长期更新,欢迎关注: 下面将从原理分析、源码解读和安装与运行这3个方面展开讲解ORB-SLAM2算法。 9.1.1 ORB-SLAM2原理分析 前面已经说过,ORB-SLAM2算法是特征点法的典型代表。因此在下面的分析中,首先介绍一…

被删库勒索了,怎么使用docker进行MySQL容器的管理?

大家觉得写还可以,可以点赞、收藏、关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 起因:云服务器MySQL密码设置的太简单了,导致到被入…

路由策略实验

1.先配置IP和环回 [Huawei]sysname R1 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [R1-GigabitEthernet0/0/0]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip add 22.1.1.1 24 [R1-GigabitEthernet0/0/1]q [R1]int l 0 [R1-LoopBack0]ip ad…

ETHDenver 2023 的 Cartesi BUIDLathon 项目创意

希望你在了解Cartesi之前,谨慎对待自己的行为。一旦你开始研究并搜寻可以使用Cartesi Rollups构建的项目或者应用,你就会陷入一个令人兴奋的螺旋洞穴中,你会上瘾。如果你想在2023年中建造一些很具有意义的事情,那你就来对地方了。…

Python01概述 基础语法 判断

Python概述 第二章-Python基础语法 01-字面量 02-注释 03-变量 04-数据类型 05-数据类型转换 06-标识符 07-运算符 08-字符串的三种定义方式 09-字符串的拼接 10-字符串格式化 11-字符串格式化的精度控制 12-字符串格式化的方式-快速写法 13-对表达式进行格式化 14-字符串格…

Java语法核心——面向对象编程

目录 面向过程思想概述 面向对象思想概述 面向对象思想特点及举例 类与对象的关系 类的定义 类与对象的案例(demo02) 对象内存存储机制 成员变量和局部变量的区别 private关键字 面向过程思想概述 我们回想一下,这几天我们完成一个需求的步骤:首…

echarts数据可视化项目搭建(一)

目录直角坐标系通用配置项tooltiptoolboxlegenddataZoom柱状图常见效果折线图常见效果散点图常见效果其他坐标系饼图基本实现常见效果地图地图基本展示不同城市颜色不同地图与散点图结合雷达图仪表盘本博客内容参考黑马课程,详细信息请参考以下网址 Bilibili官方黑…

Apache Superset 开源商业智能大数据可视化

Apache Superset 是一款现代化的开源大数据工具,也是企业级商业智能 Web 应用,用于数据探索分析和数据可视化。 Apache Superset 是一个适合企业日常生产环境中使用的商业智能可视化工具。它具有快速、轻量、直观的特点,任何用户都可以轻松地…

Spring Boot学习之Shiro

文章目录零 全部源码地址一 Shiro简介1.1 Shiro功能1.2 Shiro架构(外部视角)1.3 Shiro架构(内部视角)二 Shiro快速入门2.1 演示代码&部分源码解读三 Spring Boot集成Shio3.0 准备操作3.1 整合Shiro3.2 页面拦截实现3.3 登录认…

ESP32设备驱动-HMC5983磁力计驱动

HMC5983磁力计驱动 1、HMC5983介绍 霍尼韦尔 HMC5983 是一款温度补偿型三轴集成电路磁力计。这种表面贴装、多芯片模块专为汽车和个人导航、车辆检测和指向等应用的低场磁场传感而设计。 HMC5983 包括我们最先进的高分辨率 HMC118X 系列磁阻传感器和一个 ASIC,该 ASIC 包含…

AOP切面编程

前言:AOP(Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现在不修改源代码的情况下给程序动态…