当前位置: 首页 > news >正文

机器学习05-朴素贝叶斯算法

前言:

至此我们学习了sklearn库里的特征工程(对数据集进行处理),学习了对模型评估、选择和调优。本节学习的是机器学习中的算法之一朴素贝叶斯算法。它是一个可以对数据集进行分类任务的算法,它运用的就是概率论中的贝叶斯定理,而朴素贝叶斯就是建立在特征之间独立的情况下。本节会运用概率论中的一些知识点和公式,复习或者了解一下会更助于我们学习该算法。

一、朴素贝叶斯分类算法

1、贝叶斯算法

贝叶斯算法就是使用概率来估计数据的类别信息

  • 条件概率:在B发生了的时候,A发生的概率,数学符号P(A|B)

(P(A∩B):就是AB同时发生的概率,P(B):B发生的概率)

  • 独立事件:事件A和事件B两个发生的时候,互不影响 ,即

  • 联合概率:两个或多个事件同时发生的概率,记作 P(A∩B) 或 P(A,B)。

  • 联合概率和条件概率的关系:如果 A 和 A' 构成样本空间的一个划分,那么事件 B 的概率,就等于 A 和 A' 的概率分别乘以 B 对这两个事件的条件概率之和。

  • 贝叶斯定理:是基于假设的先验概率、给定假设下观察到不同数据的概率,提供了一种计算后验概率的方法。

    • ​ P(A|B):在事件 B 发生的条件下,事件 A 发生的概率(后验概率,即更新后的信念)

    • P(B|A):在事件 A 发生的条件下,事件 B 发生的概率(似然,即观测数据的可能性)

    • P(A):事件 A 的先验概率(未考虑 B 时的初始概率)

    • P(B):所有情况下 B 发生的总概率

    • 假设我们收到了一封邮件,有可能是垃圾邮件、有可能不是垃圾邮件

      • 假设垃圾邮件中存在词语国外高薪业务。

      • 先验概率:根据以往的经验,收到邮件之后,我认为它是垃圾邮件的一个概率值。

      • 似然:认为邮件就是垃圾邮件,邮件中有国外高新业务的一个概率情况。

      • 证据:一般可以忽略,这个值就是拿来做归一化的。

      • 后验概率:最后得到这个包含了国外高薪业务的词语的邮件是垃圾邮件的概率情况。

      • 公式如下所示:

    • 如果这个垃圾邮件的判断条件除了出现国外高薪业务的词语还有免费的词语,即结果有两个。则公式如下所示:

    2、朴素贝叶斯

    • 贝叶斯定理的贝叶斯模型是一类简单常用的分类算法,也是一种基于概率论的监督学习算法,它广泛应用于分类任务中

    • 设X 是特征,a 是类别,则贝叶斯公式有:

    • 朴素贝叶斯中朴素二字就是建立在假设各个特征之间独立的情况下,那么概率公式就可以转化为

    3、拉普拉斯平滑系数

    • 在有的情况下,由于样本数量少,有的数据特征并没有出现在样本中,那么计算出来的概率可能出现0值的情况。但在实际中,即使某个特征没有出现在样本中,那么也不能够排除它在测试样本中出现的情况。所以就可以使用拉普拉斯平滑系数来避免这种情况(零概率陷阱)

    • 计算公式:

    • 计算公式如下:

    符号含义
    Ni在类别 C 中,特征 F1 取当前特定值的样本数量
    N类别 C 的总样本数
    α平滑系数(通常取 1,称为拉普拉斯平滑;若取其他值,称为 Lidstone 平滑)
    m特征 F1 的可能取值数(例如,若 F1 是“颜色”,则 m 为颜色种类数)

    4、案例

    • 用朴素贝叶斯算法对鸢尾花的分类案例代码:

    import numpy as np
    #导入朴素贝叶斯
    from sklearn.native_bayes import GaussianNB
    #导入数据集
    from sklearn.datasets import load_iris
    #导入划分数据集包
    from sklearn.model_selection import train_test_split
    #导入模型评估指标
    from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
    ​
    #加载数据集
    iris=load_iris()
    data,target=iris.data,iris.target
    X_train,X_test,y_train,y_test=train_test_split(data,target,test_size=0.2,random_state=42)
    #创建估计器(创建对象)
    gnb=GaussianNB()
    #训练模型
    gnb.fit(X_train,y_train)
    #预测
    """predict:对应标签predict_proba:每个标签的概率
    """
    np.set_printoptions(suppress= True)#忽略科学计数法
    ​
    #新数据
    predict_data=np.array([[5.1,3.5,1.4,0.2]])
    print("新数据中的预测数据",gnb.predict(predict_data))
    print("新数据中的预测概率",gnb.predict_proba(predict_data))
    ​
    # 模型评估
    result=gnb.predict(X_test)
    #输出模型得分
    print("模型得分:\n", gnb.score(X_test,y_test))
    print("预测准确率:\n", accuracy_score(y_test, result))
    print("分类报告:\n", classification_report(y_test, result))
    print("混淆矩阵:\n", confusion_matrix(y_test, result))
    • 结果输出:

    新数据中的预测数据 [0]
    新数据中的预测概率 [[1. 0. 0.]]
    模型得分:1.0
    预测准确率:1.0
    分类报告:precision    recall  f1-score   support
    ​0       1.00      1.00      1.00        101       1.00      1.00      1.00         92       1.00      1.00      1.00        11
    ​accuracy                           1.00        30macro avg       1.00      1.00      1.00        30
    weighted avg       1.00      1.00      1.00        30
    ​
    混淆矩阵:[[10  0  0][ 0  9  0][ 0  0 11]]

    http://www.dtcms.com/a/335749.html

    相关文章:

  • Elasticsearch 在向量捜索中使用 Direct I0
  • java-maven
  • 佳文赏读 || (CVPR 2025新突破) Robobrain:机器人操作从抽象到具体的统一大脑模型(A Unified Brain Model)
  • 【教程】笔记本安装FnOS设置合盖息屏不休眠
  • Pulsar存储计算分离架构设计之存储层BookKeeper(上)
  • Android 组件封装实践:从解耦到架构演进
  • JavaWeb前端(HTML,CSS具体案例)
  • 【基础】贪心 区间覆盖
  • GANs生成对抗网络生成手写数字的Pytorch实现
  • 基于Spring Boot+Vue的莱元元电商数据分析系统 销售数据分析 天猫电商订单系统
  • 【网络安全】Webshell的绕过——绕过动态检测引擎WAF-缓存绕过(Hash碰撞)
  • 系统学习算法 专题十七 栈
  • Vue中 v-if 和 v-show 的区别
  • 数据一致性与 MVCC 理解
  • TCP和UCP的区别
  • 深入解析Tomcat Processor的协议处理机制
  • 路由器配置之模式
  • 【技术博客】480p 老番 → 8K 壁纸:APISR × SUPIR × CCSR「多重高清放大」完全指南
  • React 19 核心特性
  • VS Code配置MinGW64编译libxlsxwriter和xlsxio库
  • 【R语言】R语言矩阵运算:矩阵乘除法与逐元素乘除法计算对比
  • 开源数据发现平台:Amundsen Metadata Service 元数据服务
  • VS Code配置MinGW64编译SQLite3库
  • uniappx 安卓端本地打包的一些总结
  • Sklearn 机器学习 邮件文本分类 计数器向量化文本
  • 学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
  • 论文投稿时,如何绘制插入无失真的图
  • 44.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(三)
  • 第七十九:AI的“急诊科医生”:模型失效(Loss Explode)的排查技巧——从“炸弹”到“稳定”的训练之路!
  • scikit-learn 中的均方误差 (MSE) 和 R² 评分指标