返回顶部
首页 > 资讯 > 后端开发 > Python >朴素贝叶斯(Naive Bayes)
  • 248
分享到

朴素贝叶斯(Naive Bayes)

机器学习人工智能python 2023-09-24 14:09:53 248人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

        朴素贝叶斯是一个基于概率统计的机器学习算法,作用是用于多分类。         训练集包含已知分类类别的大量样本,每个样本具有n维特征,例如:已知一个人分类为胖或者瘦,有5个特征用于分类,这5个特征分别是体重、身高、年

        朴素贝叶斯是一个基于概率统计的机器学习算法,作用是用于多分类。

        训练集包含已知分类类别的大量样本,每个样本具有n维特征,例如:已知一个人分类为胖或者瘦,有5个特征用于分类,这5个特征分别是体重、身高、年龄、鞋码、每天吃几碗饭。每个特征可能还有分等级,如鞋码分为L、XL等。

        主要用到的数学知识有:条件概率、全概率公式、贝叶斯定理等。朴素贝叶斯对于具体的问题需要具体分析。

目录

一,基本的数学知识

1.1条件概率

1.2 全概率公式

1.3贝叶斯公式

二,具体例子实现二分类算法

2.1 独立分布、联合分布与条件分布的关系

2.2 应用贝叶斯公式

2.3 对概率计算公式取对数,从而连乘变为连加

三,python代码实现

3.1代码解析

3.1.1读取数据集

3.1.2 计算P(X|Y)

3.1.3模型数据计算结果解读

3.1.4模型的使用

3.2python代码

四,总结


一,基本的数学知识

1.1条件概率

        概率:某类样本的数量与样本总量的比值称为频率,对频率求极限得到概率。

        条件概率:首先对总的样本按照给定条件将合适的选出来,某类样本的数量与选出来的样本数量的比值极限就是条件概率。

876e0320ba264d1da8f44a5f6a2b0898.png

1.2 全概率公式

        由条件概率,可以得到:P(AB)=P(B)P(A|B)=P(A)P(B|A)。事件A由b1,b2,b3,……,bn等影响,全概率就是P(AB),其中B可以独立地分为B1,B2,……,Bn,将Bj作为条件累加得到。

137b9562091bfc1065bdb152c4560089.png

1.3贝叶斯公式

        贝叶斯公式就是对全概率公式的反驳,已知A发生的概率,求A发生是因为b1,b2,……,bn中b6引起的概率。

046c480252e646a9aa2a962f1d9ce3f5.png

二,具体例子实现二分类算法

2.1 独立分布、联合分布与条件分布的关系

        一共具有15个样本。朴素贝叶斯的情况用到了全概率公式,只是全概率公式的完备事件组只有一个。

73db96d3f708433dbebc994d1c435033.png

2.2 应用贝叶斯公式

        下图中的各种概率可以根据样本计算得到。

0f5cb494d6284dc2836a30a0a0c375da.png

2.3 对概率计算公式取对数,从而连乘变为连加

        作为机器学习的算法,必然少不了模型的训练,概率模型函数的训练就是依据已有的样本,把一些计算过程的固定参数进行计算保存。

1fc6114af40143eeb299ad1798e1f37d.png

        对于数学来讲,上述模型还可以进一步进行简化。简化的理论如下:GMM分类模型就是进一步简化得到的结果。

6886084d0f774d52ac85669e7de1e7a7.png

三,python代码实现

3.1代码解析

3.1.1读取数据集

        依据算法流程,首先将需要的数据利用一定的数据结构放入内存。或者利用excel可视化进行操作计算得到各种所需的数据结构也可行。

bfad82814a944dd9907c1286aeba063a.png

3.1.2 计算P(X|Y)

25150f5551fd4aa4a725a3ebc98c3d86.png

3.1.3模型数据计算结果解读

        朴素贝叶斯最终需要计算一些概率,模型训练就是将要用到的各种参数进行计算并保存,当得到新样本时,将样本的特征矩阵代入就可以计算。

dc436b31753642d2bd539151bfb0a679.png

3.1.4模型的使用

5c8c82807f9a46619ffa8284bc5011b2.png

3.2Python代码

import numpy as npdef createDataSet():    dataSet = [[0, 0, 0, 0, 'no'],     #数据集,平面二维N×D            [0, 0, 0, 1, 'no'],            [0, 1, 0, 1, 'yes'],            [0, 1, 1, 0, 'yes'],            [0, 0, 0, 0, 'no'],            [1, 0, 0, 0, 'no'],            [1, 0, 0, 1, 'no'],            [1, 1, 1, 1, 'yes'],            [1, 0, 1, 2, 'yes'],            [1, 0, 1, 2, 'yes'],            [2, 0, 1, 2, 'yes'],            [2, 0, 1, 1, 'yes'],            [2, 1, 0, 1, 'yes'],            [2, 1, 0, 2, 'yes'],            [2, 0, 0, 0, 'no']]    labels = ['年龄', '有工作', '有自己的房子', '信贷情况']        #特征标签    return dataSet, labels #返回数据集和分类属性# 获得 P(X|Y)def trainPbmodel_X(feats):    N,D = np.shape(feats) #N个满足条件的样本,每个样本D个特征       model = {}    # 对每一维度的特征进行概率统计    for d in range(D):        data = feats[:,d].tolist() #获取所有样本每个特征所组成的列表        keys = set(data) # 列表变集合,实现去重,获取特征的取值个数,如年龄类别分为老中幼,那么keys里面存三个数据        N = len(data) #样本个数        model[d] ={}        for key in keys:            model[d][key] = float(data.count(key)/N)    return model# datas: list格式 每个元素表示1个特征序列    # labs:  list格式 每个元素表示一个标签def trainPbmodel(datas,labs):       # 定义模型    model = {}    # 获取分类的类别    keys = set(labs)    for key in keys:        # 获得P(Y)        Pbmodel_Y = labs.count(key)/len(labs) #每个类别的概率                # 收集标签为Y的数据        index = np.where(np.array(labs)==key)[0].tolist() #[2, 3, 7, 8, 9, 10, 11, 12, 13],类别为Y的样本序号        feats = np.array(datas)[index] #[2, 3, 7, 8, 9, 10, 11, 12, 13],类别为Y的样本的特征矩阵        # print(index)        # print(feats)                # 获得 P(X|Y)        Pbmodel_X = trainPbmodel_X(feats)                # 模型保存        model[key]={}        model[key]["PY"] = Pbmodel_Y        model[key]["PX"] = Pbmodel_X    return model    # feat : list格式 一条输入特征# model: 训练的概率模型# keys :考察标签的种类 def getPbfromModel(feat,model,keys):    results ={}    eps = 0.00001    for key in keys:        # 获取P(Y)        PY = model.get(key,eps).get("PY")                # 分别获取 P(X|Y)        model_X = model.get(key,eps).get("PX")        list_px=[]        for d in range(len(feat)):            pb = model_X.get(d,eps).get(feat[d],eps)            list_px.append(pb)                result = np.log(PY) + np.sum(np.log(list_px))        results[key]= result    return resultsif __name__ == '__main__':                '''实验一  自制贷款数据集'''        # 获取数据集    dataSet, labels = createDataSet()        # 截取数据和标签    datas = [i[:-1] for i in dataSet] # 特征矩阵    labs = [i[-1] for i in dataSet] #每个样本的类别1×N        # 获取标签种类    keys = set(labs) # keys是{'yes', 'no'},集合去掉相同的标签        # 进行模型训练    model = trainPbmodel(datas,labs)    print(model)        # 根据输入数据获得预测结果    feat = [0,0,0,1]    result = getPbfromModel(feat,model,keys)    print(result)        # 遍历结果找到概率最大值进行数据    for key,value in result.items():        if(value == max(result.values())):            print("预测结果是",key)    

四,总结

        朴素贝叶斯算法最终算的是一系列概率,这些概率与样本的特征有关,如果有N个类别就需要计算N个概率,其中概率最大的就是样本所属类别。

        在计算这些概率的时候使用到了贝叶斯定理,贝叶斯公式中的个别数据需要使用数据集计算的到,也就是模型参数的训练。这些参数如下:

7f932f40c5744bd8bc72aa600a2228ce.png

来源地址:https://blog.csdn.net/weixin_44992737/article/details/127145702

--结束END--

本文标题: 朴素贝叶斯(Naive Bayes)

本文链接: https://lsjlt.com/news/416936.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 朴素贝叶斯(Naive Bayes)
            朴素贝叶斯是一个基于概率统计的机器学习算法,作用是用于多分类。         训练集包含已知分类类别的大量样本,每个样本具有n维特征,例如:已知一个人分类为胖或者瘦,有5个特征用于分类,这5个特征分别是体重、身高、年...
    99+
    2023-09-24
    机器学习 人工智能 python
  • 朴素贝叶斯(Naive Bayesian
    简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用于寻找决策面的算法。   基本思...
    99+
    2023-01-30
    朴素 贝叶斯 Bayesian
  • 朴素贝叶斯和半朴素贝叶斯(AODE)分类器Python实现
      一、概述  机器学习最后一次实验,要求实现朴素贝叶斯和AODE的半朴素贝叶斯分类器。由于老师说可以调用现成的相关机器学习的库,所以我一开始在做朴素贝叶斯分类器的时候,直接调用了sklearn库,很方便,可是问题来了,在做AODE半朴素贝...
    99+
    2023-06-02
  • 朴素贝叶斯算法的Python实现
    注意:1、代码中的注释请不要放在源程序中运行,会报错。    2、代码中的数据集来源于http://archive.ics.uci.edu/ml/datasets/Car+Evaluation     3、对于朴素贝叶斯的原理,可以查看我的...
    99+
    2023-01-31
    朴素 算法 贝叶斯
  • python中如何使用朴素贝叶斯算法
    这里再重复一下标题为什么是"使用"而不是"实现": 首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高。 其次,对于数学不好的人来说,为了实现算法而去研究一堆公式是很痛苦的事情。 再次,...
    99+
    2022-06-04
    如何使用 朴素 算法
  • R语言朴素贝叶斯技术怎么使用
    本篇内容主要讲解“R语言朴素贝叶斯技术怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“R语言朴素贝叶斯技术怎么使用”吧!安装package:> install.packag...
    99+
    2023-06-19
  • Python机器学习应用之朴素贝叶斯篇
    朴素贝叶斯(Naive Bayes,NB):朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。朴素贝叶斯算法一般应用在文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等。 1、...
    99+
    2024-04-02
  • 如何优化数据库的数据朴素贝叶斯
    要优化数据库的数据朴素贝叶斯,可以考虑以下几点: 数据清洗:确保数据质量高,包括去除重复数据、处理缺失值、处理异常值等。 特征选择:选择合适的特征对模型进行训练,可以使用特征选择技术如方差分析、相关性分析等。 数据标准化:对数据...
    99+
    2024-07-03
    数据库
  • web算法中朴素贝叶斯如何实现文档分类
    本篇内容主要讲解“web算法中朴素贝叶斯如何实现文档分类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web算法中朴素贝叶斯如何实现文档分类”吧!  作业要求:  实验数据在bayes_data...
    99+
    2023-06-02
  • Java利用朴素贝叶斯分类算法实现信息分类
    目录贝叶斯分类算法 代码实例数据集data.txt代码实现输出结果使用场景贝叶斯分类算法  贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类...
    99+
    2024-04-02
  • Python编程之基于概率论的分类方法:朴素贝叶斯
    概率论啊概率论,差不多忘完了。 基于概率论的分类方法:朴素贝叶斯 1. 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理...
    99+
    2022-06-04
    概率论 朴素 方法
  • 机器学习:朴素贝叶斯模型算法原理(含实战案例)
    机器学习:朴素贝叶斯模型算法原理 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍...
    99+
    2023-09-04
    机器学习 人工智能 python 朴素贝叶斯 开发语言
  • Python通过朴素贝叶斯和LSTM分别实现新闻文本分类
    目录一、项目背景二、数据处理与分析三、基于机器学习的文本分类–朴素贝叶斯1. 模型介绍2. 代码结构3. 结果分析四、基于深度学习的文本分类–LSTM1. 模型介绍2. 代码结构3....
    99+
    2024-04-02
  • Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类
    这篇文章主要介绍Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据处理与分析本次大赛提供的材料是由csv格式编写,只需调用python中的pandas库读取...
    99+
    2023-06-22
  • python机器学习朴素贝叶斯算法及模型的选择和调优详解
    目录一、概率知识基础1.概率2.联合概率3.条件概率二、朴素贝叶斯1.朴素贝叶斯计算方式2.拉普拉斯平滑3.朴素贝叶斯API三、朴素贝叶斯算法案例1.案例概述2.数据获取3.数据处理...
    99+
    2024-04-02
  • 机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
    机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁...
    99+
    2023-10-06
    机器学习 分类 朴素贝叶斯 python 开发语言
  • python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析
    这篇文章将为大家详细讲解有关python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、概率知识基础1.概率概率就是某件事情发生的可能性。2.联合概率包...
    99+
    2023-06-25
  • python实现贝叶斯推断的例子
    目录1. 前言2. 问题描述3. 贝叶斯规则4. Bayes engine: scalar implementation 5. Bayes engine: vec...
    99+
    2024-04-02
  • Python中的贝叶斯推理的软件包 pystan
    前言PyStan 为 Stan 提供了一个 Python 接口,这是一个使用 No-U-Turn 采样器进行贝叶斯推理的软件包,这是Hamiltonian Monte Carlo 的一种变体。PyStan具有以下依赖项:Python:2.7...
    99+
    2023-06-02
  • PythonMultinomialNaiveBayes多项贝叶斯模型实现原理介绍
    之前在一次跟“某Fish”客户进行交谈时,我在的需求下学习了多项贝叶斯(Multinomial Naive Bayes)这个模型。 在了解多项贝叶斯模型之前,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作