分类算法系列④:朴素贝叶斯算法

news2025/1/12 23:33:28

目录

1、贝叶斯算法

2、朴素贝叶斯算法

3、先验概率和后验概率

4、⭐机器学习中的贝叶斯公式

5、文章分类中的贝叶斯

6、拉普拉斯平滑系数

6.1、介绍

6.2、公式

7、API

8、示例

8.1、分析

8.2、代码

8.3、⭐预测流程分析


 🍃作者介绍:准大三本科网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发。

🦅主页:@逐梦苍穹

⭐分类算法系列①:初识概念

⭐分类算法系列②:KNN(K-近邻)算法

⭐分类算法系列③:模型选择与调优 (Facebook签到位置预测)

🍁您的三连支持,是我创作的最大动力🌹

首先介绍贝叶斯算法,再介绍朴素贝叶斯,朴素贝叶斯是贝叶斯的特殊情况。

1、贝叶斯算法

贝叶斯算法是基于贝叶斯定理的一类算法,用于从已知的条件概率中推断出未知事件的概率。贝叶斯定理是一个描述联合概率分布的数学公式,其形式如下:P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}

其中:

  • P(AB) 表示在已知事件 B 发生的情况下事件 A 发生的概率(后验概率)。
  • P(BA) 表示在已知事件 A 发生的情况下事件 B 发生的概率。
  • P(A) 和 P(B) 分别表示事件 A 和事件 B 的先验概率。

贝叶斯算法的应用范围广泛,包括垃圾邮件过滤、文本分类、推荐系统等。通过不断地更新先验概率和计算后验概率,贝叶斯算法可以根据新的证据不断更新对未知事件的概率估计。

2、朴素贝叶斯算法

朴素贝叶斯算法是贝叶斯算法的一种特例,用于分类问题。它假设特征之间相互独立,从而简化了计算过程。尽管这个假设通常并不成立,但朴素贝叶斯算法在很多实际应用中表现出色。

朴素贝叶斯算法的基本思想是基于贝叶斯定理,通过计算后验概率来判断给定输入数据属于不同的类别。在分类问题中,输入数据被表示为特征向量,而类别即为需要预测的目标类别。朴素贝叶斯分类器根据训练数据学习类别的概率分布,然后根据输入特征计算后验概率,选择概率最高的类别作为预测结果。

朴素贝叶斯算法具有简单、高效的特点,适用于文本分类、垃圾邮件过滤、情感分析等任务。

尽管其假设特征之间独立的前提在现实中不一定成立,但在许多情况下,朴素贝叶斯算法依然能够取得很好的分类效果。

3、先验概率和后验概率

先验概率(Prior Probability)和后验概率(Posterior Probability)都是贝叶斯定理中的概念,用于描述在已知或考虑了一些信息或条件的情况下,事件发生的概率。

  1. 先验概率: 先验概率是在考虑任何新信息之前,根据以往的经验或已有的知识,对事件发生概率的主观估计。它表示在没有额外信息的情况下,事件发生的概率。在贝叶斯定理中,先验概率被表示为 P(A),其中 A 表示某个事件。
  2. 后验概率: 后验概率是在考虑了新信息或额外条件后,对事件发生概率进行更新的概率。它表示在已知一些条件或信息的情况下,事件发生的概率。在贝叶斯定理中,后验概率被表示为 P(AB),其中 A 表示某个事件,B 表示已知的条件或信息。

贝叶斯定理描述了如何根据已知的条件和先验概率计算后验概率,即如何将新信息融入到概率估计中。这个过程可以帮助我们更准确地估计事件的概率,尤其是在有限的数据或信息下。在机器学习和统计中,贝叶斯定理和先验、后验概率的概念经常被用于构建分类器、预测模型和概率推断。

4机器学习中的贝叶斯公式

原理同普遍条件下的公式肯定是的,但是表现形式可以略有不同。

在机器学习中,特别是在朴素贝叶斯分类器中,贝叶斯公式的形式通常如下:

P(C_k|X) = \frac{P(X|C_k) \cdot P(C_k)}{P(X)}

其中:

  • P(C_k|X)是给定输入数据 X,在类别 C_k 下发生的后验概率,表示为对于给定数据 X,它属于类别 C_k 的概率。
  • P(X|C_k)是在类别 C_k 下,输入数据 X 发生的条件概率,表示为给定类别 C_k 下输入数据 X 的概率。
  • P(C_k)是类别 C_k 的先验概率,表示在没有任何信息的情况下,数据属于类别 C_k 的概率。
  • P(X)是输入数据 X 的边缘概率,表示数据 X发生的概率。

在朴素贝叶斯算法中,假设特征之间是独立的(朴素假设),因此可以将 P(X|C_k) 表示为各个特征的条件概率的乘积,即P(X|C_k) = P(x_1|C_k) \cdot P(x_2|C_k) \cdot \ldots \cdot P(x_n|C_k)x_i表示第i个特征.

这个公式用于计算在给定输入数据 X 的情况下,属于各个类别 C_k 的后验概率。

在分类问题中,我们可以选择具有最高后验概率的类别作为预测的类别。

5、文章分类中的贝叶斯

P(C|F1,F2,...) = \frac{P(F1,F2,...|C) \cdot P(C)}{P(F1,F2,...)}

公式分为三个部分(其中C可以是不同类别):

  1. P(C):每个文档类别的概率(某文档类别数/总文档数量)
  2. P(W│C):给定类别下特征(被预测文档中出现的词)的概率
    1. 计算方法:P(F1│C)=Ni/N(训练文档中去计算)
      1. Ni为该F1词在C类别所有文档中出现的次数
      2. N为所属类别C下的文档所有词出现的次数和
  1. P(F1,F2,…) 预测文档中每个词的概率

6、拉普拉斯平滑系数

6.1、介绍

拉普拉斯平滑(Laplace Smoothing),也称为加一平滑(Add-One Smoothing)或修正的拉普拉斯法则,是一种用于解决概率估计中的零概率问题的技术。它主要应用于朴素贝叶斯分类器等机器学习和自然语言处理任务中。

在统计学和概率论中,当我们根据已有数据估计事件的概率时,有时候可能会遇到某些事件在训练数据中没有出现,导致估计出的概率为零。这可能会在实际应用中引起问题,例如在贝叶斯分类器中,如果某个特征值在某个类别中未见过,就会导致整个分类概率为零。

拉普拉斯平滑通过为每个可能的特征值添加一个平滑因子,解决了这个问题。平滑因子通常是1,所以也称为加一平滑。它的基本思想是在所有可能的特征值上增加一个计数,使得每个特征值至少出现一次,从而避免零概率的问题。

在朴素贝叶斯分类器中,拉普拉斯平滑应用于计算条件概率。对于每个特征,都会将计数值加1,同时对可能的特征值总数进行加法平滑。这样,在计算后验概率时,就可以避免分子为零的情况。

拉普拉斯平滑的使用使得概率估计更稳定,尤其是在数据量有限的情况下。然而,这种平滑也可能引入一定的偏差,因为它会均匀地将概率分布平移,但在实际应用中,这种偏差通常是可以接受的。

6.2、公式

平滑后的条件概率:P(x_{ij}|C_k) = \frac{count(x_{ij}, C_k) + \alpha}{N_k + \alpha m}= \frac{count(x_{ij}, C_k) + \alpha}{N_k + |V_i|}

参数解释:

  • count(x_{ij}, C_k)表示在类别 C_k 下特征值 x_{ij} 出现的次数。
  • N_k表示在类别 C_k 下的样本总数。
  • |V_i|表示特征x_i 可能的取值数量(例如为训练文档中出现的特征词个数)

这个公式表示了在计算平滑后的条件概率时,为每个特征值 x_{ij} 都加上了一个平滑因子,以确保每个特征值至少出现一次,避免零概率的情况。

7、API

sklearn.naive_bayes.MultinomialNB(alpha = 1.0)

朴素贝叶斯分类

alpha:拉普拉斯平滑系数

8、示例

8.1、分析

代码实现的步骤如下:

  • 分割数据集
  • tfidf进行的特征抽取
  • 朴素贝叶斯预测

8.2、代码

# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/9/1 11:00
from sklearn.datasets import fetch_20newsgroups  # 20类新闻分类
from sklearn.feature_extraction.text import TfidfVectorizer  # TF-IDF特征提取
from sklearn.model_selection import train_test_split  # 训练集划分
from sklearn.naive_bayes import MultinomialNB  # 多项式朴素贝叶斯分类器

'''
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
    朴素贝叶斯分类
    alpha:拉普拉斯平滑系数
'''
def naiveBayes():
    """
        朴素贝叶斯对新闻数据集进行预测
    """
    # 获取新闻的数据,20个类别
    news = fetch_20newsgroups(subset='all')

    # 进行数据集分割
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.3)

    # 对于文本数据,进行特征抽取
    tf = TfidfVectorizer()

    x_train = tf.fit_transform(x_train)
    # 这里打印出来的列表是:训练集当中的所有不同词的组成的一个列表
    print(tf.get_feature_names())
    # print(x_train.toarray())

    # 不能调用fit_transform
    # TF-IDF 特征抽取过程中,模型已经通过 x_train 学习了词汇表和特征权重,
    # 因此在处理测试集时只需要进行转换操作,而不再需要重新拟合模型
    x_test = tf.transform(x_test)

    # estimator估计器流程
    mlb = MultinomialNB(alpha=1.0)

    mlb.fit(x_train, y_train)

    # 进行预测
    y_predict = mlb.predict(x_test)

    print("预测每篇文章的类别:", y_predict[:100])
    print("真实类别为:", y_test[:100])

    print("预测准确率为:", mlb.score(x_test, y_test))


if __name__ == '__main__':
    naiveBayes()

实现结果:

在代码中,有一段是:

        

这部分不能调用fit_transform():

        TF-IDF 特征抽取过程中,模型已经通过 x_train 学习了词汇表和特征权重,

        因此在处理测试集时只需要进行转换操作,而不再需要重新拟合模型

8.3预测流程分析

贝叶斯算法(包括朴素贝叶斯算法)在文本分类中的预测过程涉及计算后验概率,以确定最可能的类别。下面是详细的预测过程说明:

  1. 特征提取:首先,文本数据需要经过特征提取的过程,将文本转换为数字化的特征向量。在文本分类中,常用的特征表示方法是 TF-IDF(Term Frequency-Inverse Document Frequency)。
  2. 计算先验概率:对于每个类别 C_k ,需要计算它在训练数据中出现的概率,即先验概率P(C_k) 。这可以通过统计训练数据中属于类别 C_k 的样本数量除以总样本数量来得到。
  3. 计算条件概率:对于每个特征x_i ,需要计算在给定类别C_k 的情况下特征值 x_{ij} 出现的概率,即条件概率P(x_{ij}|C_k) 。这可以通过先前提到的拉普拉斯平滑后的条件概率公式来计算。
  4. 计算后验概率:对于给定的文本X ,需要计算它在每个类别下的后验概率P(C_k|X) ,表示在已知文本特征的情况下属于类别 C_k 的概率。根据贝叶斯定理,后验概率可以表示为:P(C_k|X) = \frac{P(X|C_k) \cdot P(C_k)}{P(X)}
    1. 其中, P(X|C_k) 是在类别 C_k 下文本特征 X 出现的概率,可以根据特征独立性假设进行计算:P(X|C_k) = P(x_{i1}|C_k) \cdot P(x_{i2}|C_k) \cdot \ldots \cdot P(x_{in}|C_k)
    2. - P(C_k) 是先验概率,
    3. - P(X) 是文本特征X 出现的概率。
  5. 决策规则:选择具有最高后验概率的类别作为预测结果。即对于给定的文本X ,选择满足k = \arg\max_k P(C_k|X) 的类别C_k

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

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

相关文章

Modelsim查看断言

断言编译modelsim 在modelsim中开启断言编译和显示功能: 【编译verilog代码时按照system verilog进行编译】 vlog -sv abc.v 或者使用通配符编译所有的.v或者.sv文件 ( vlog -sv *.sv *.v) 【仿真命令加一个-assertdebug】 vsim -a…

华为云服务

【计算】 【存储】 对象存储服务 OBS 对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 OBS系统和单个桶都没有总数据容量和对象/文件数量的限制…

视频文件损坏无法播放如何修复?导致视频文件损坏的原因

如果我们遇到因视频文件损坏而无法正常播放,我们该怎么办?这种情况通常意味着视频文件已经损坏。我们不能访问、编辑或使用它们。那么应该用什么正确的工具和修复程序来修复视频呢? 视频文件损坏的原因 了解视频损坏如何修复之前&#xff0c…

【板栗糖GIS】——360浏览器如何安装微信读书插件

目录 1. 下载插件 ​2. 解压edge插件 3. 点击360浏览器的插件管理 4. 加载已解压的扩展程序 前情提示:不要从任务栏打开360浏览器,要从桌面快捷键打开 1. 下载插件 截止到2023年9月1日,github提供的为0.03版本,下载后会得到…

AP51656 LED车灯电源驱动IC 兼容替代PT4115 PT4205 PWM和线性调光

产品描述 AP51656是一款连续电感电流导通模式的降压恒流源 用于驱动一颗或多颗串联LED 输入电压范围从 5V 到 60V,输出电流 可达 1.5A 。根据不同的输入电压和 外部器件, 可以驱动高达数十瓦的 LED。 内置功率开关,采用高端电流采样设置 …

ThingsKit物联网平台告警中心之告警记录

概述 当设备达到预先指定的阈值时,平台会自动产生告警,可以通过告警记录及时查看详细的告警信息以及对告警进行处理和反馈。 详情 场景联动中设备产生的告警记录详情。 :::info 💡 提示 告警记录状态:激活未确认、激活已确认、…

使用 Amazon SageMaker 的生成式 AI 定制个性化头像

生成式 AI 已经成为各行业创意过程增强和加速的常用工具,包括娱乐、广告和平面设计。它可以为观众创造更个性化的体验,并提高最终产品的整体质量。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮…

【STM32】学习笔记(串口通信)

串口通信 通信接口硬件电路电平标准USARTUSART框图 通信接口 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信&#…

liunx下ubuntu基础知识学习记录

使用乌班图 命令安装使用安装网络相关工具安装dstat抓包工具需要在Ubuntu内安装openssh-server gcc安装vim安装hello word输出1. 首先安装gcc 安装这个就可以把gcc g一起安装2. 安装VIM3.编译运行代码 解决ubuntu与主机不能粘贴复制 命令安装使用 安装网络相关工具 使用ifconf…

wandb安装方法及本地部署教程

文章目录 1 wandb介绍2 wandb安装2.1 注册wandb账号2.2 创建项目并获得密钥2.3 安装wandb并登录 3 wandb本地部署3.1 设置wandb运行模式3.2 云端查看运行数据 4 总结 1 wandb介绍 Wandb(Weights & Biases)是一个用于跟踪、可视化和协作机器学习实验…

9.GPIO子系统

目录 GPIO1节点 内核设备树新增rgb_led节点(使用gpio子系统) 常用的对外接口 头文件 of_find_node_by_path()函数 of_get_named_gpio()函数 gpio_request()函数 gpio_free()函数 gpio_direction_output()函数 gpio_direction_input()函数 gpi…

Gradio Auth登录页设置中文

最近入坑了gradio, 就是一款python框架,可以通过简单的几行代码,就能够帮我们构建一个简易的页面网站,并且可以在里面做相应的逻辑处理。目前该框架在AI领域相对比较火爆,用于给自己的大模型构建操作页面。 官网地址:…

离散数据编码方式总结(OneHotEncoder、LabelEncoder、OrdinalEncoder、get_dummies、DictVector

写在前面 在机器学习的特征选择的时候,往往有一些离散的特征不好计算,此时需要对这些特征进行编码,但是编码方式有很多,不同的包也会有不同的编码方式。(明白OneHotEncoder、LabelEncoder、OrdinalEncoder、get_dummi…

网络基础之重中之重

目录 IP协议 ​编辑 基本概念: 协议头格式: ​编辑 网段划分 DHCP : CIDR: 特殊的IP地址: IP地址的数量限制: 私有IP和公网IP 路由 路由的过程: 数据链路层 认识以太网&#x…

【JAVA】类和对象,继承

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 什么是类,对象类和类的实例化字段的初始化类中实现方法static 静态关键字 封装priva…

HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(二)

三、拖动手势(PanGesture) .PanGestureOptions(value?:{ fingers?:number; direction?:PanDirection; distance?:number}) 拖动手势用于触发拖动手势事件,滑动达到最小滑动距离(默认值为5vp)时拖动手势识别成功&am…

IP初学习

1.IP报文 首部长度指的是报头长度,用于分离报头和有效载荷 2.网段划分 IP地址 目标网络 目标主机 3.例子 4.特殊的IP地址 5.真正的网络环境 6.调制解调器 “猫”,学名叫宽带无线猫 7.NAT 源IP在内网环境不断被替换 8.私有IP不能出现在公网上 因…

Python学习之三 变量与数据类型深度学习

本部分内容参考自以下书。 在学习之二中说道,所有的数据类型都是类,那么变量以及对应的值都是对象。为了后续更容易理解,我们先来看一下内置函数id的帮助文档。 它用于返回对象的标识。此标识在生命周期内必须是唯一且恒定的。 在Python中,变量只是名称,赋值操作并不会复…

做西班牙语翻译好不好?西班牙语薪酬如何?

众所周知,西班牙语作为全球应用广泛的“小语种”,市场对它的翻译需求极为庞大。西班牙语翻译是你寻求优秀事业的新赛道!那么,西班牙语翻译薪酬如何,北京西语翻译哪家好? 美国的调查数据告诉你,西…

Linux下的系统编程——进程(七)

前言: 程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开的文件, 要处理的信号和CPU上下文等等.下面让我们开始对Linux进程的学…