参考视频与文献:

https://www.bilibili.com/video/BV1oX4y137p9?spm_id_from=333.999.0.0&vd_source=77c874a500ef21df351103560dada737

统计学习方法(第二版)李航(编著)

一、朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常用的方法。

那么在掌握朴素贝叶斯算法之前,我们必须了解条件概率和全概率。

1.1、条件概率公式如下:

1.2、全概率公式如下:

指若事件{A1,A2,…,An}构成一个完备事件组且都有正概率,则对任意一个事件B都有:

则有

二、贝叶斯定理:

一种有效计算条件概率的方法称为贝叶斯定理。贝叶斯定理告诉我们如何交换条件概率中的条件与结果,即如果已知 P(X|Y),要求 P(Y|X):

这里的每个概率都有其特定的名称:

P ( Y ) :先验概率。先验概率(prior probability)是指事情还没有发生,求这件事情发生的可能性的大小,是先验概率。它往往作为"由因求果"问题中的"因"出现。

P ( Y ∣ X ) :后验概率。后验概率是指事情已经发生,求这件事情发生的原因是由某个因素引起的可能性的大小。后验概率的计算要以先验概率为基础

P ( X ∣ Y ) :条件概率,又叫似然概率,一般是通过历史数据统计得到。一般不把它叫做先验概率,但从定义上也符合先验定义。

三、贝叶斯推论:

结合条件概率可推导出如下公式:

即为贝叶斯公式。把P(Ai)称为先验概率(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。
P(Ai|B)称为后验概率(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。
P(B|Ai)/P(B)称为可能性函数(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。
所以条件概率可以理解为:后验概率 = 先验概率 × 调整因子

如果"可能性函数">1,意味着先验概率被增强,事件A的发生的可能性变大;
如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;
如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。

四、朴素贝叶斯法是典型的生成学习方法。生成方法由训练数据学习联合概率分布P(X,Y),然后求得后验概率分布P(Y|X)。具体来说,利用训练数据学习P(X|Y)和P(Y)的估计,得到联合概率分布:

P(X,Y)=P(Y)P(X|Y)

概率估计方法可以是极大似然估计或贝叶斯估计。

五、朴素贝叶斯法的基本假设是条件独立性,

这是一个较强的假设。由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯法的学习与预测大为简化。因而朴素贝叶斯法高效,且易于实现。其缺点是分类的性能不一定很高。

六、朴素贝叶斯算法如下:

视频截图:

程序如下:

import numpy as npdef createDataSet():dataSet = [[0, 0, 0, 0, 'no'],     #数据集[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                             #返回数据集和分类属性# 获取概率模型, 输入feat np.array格式 大小[N,D]
def trainPbmodel_X(feats):N,D = np.shape(feats)model = {}# 对每一维度的特征进行概率统计for d in range(D):data = feats[:,d].tolist()keys = set(data)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()feats = np.array(datas)[index]# 获得 P(X|Y)Pbmodel_X = trainPbmodel_X(feats)# 模型保存model[key]={}model[key]["PY"] = Pbmodel_Ymodel[key]["PX"] = Pbmodel_Xreturn model# feat : list格式 一条输入特征
# model: 训练的概率模型
# keys :考察标签的种类
def getPbfromModel(feat,model,keys):results ={}eps = 0.00001for 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]= resultreturn resultsif __name__ == '__main__':        '''实验一  自制贷款数据集'''# # 获取数据集# dataSet, labels = createDataSet()# # 截取数据和标签# datas = [i[:-1] for i in dataSet]# labs = [i[-1] for i in dataSet] # # 获取标签种类# keys = set(labs)# # 进行模型训练# model = trainPbmodel(datas,labs)# print(model)# # 根据输入数据获得预测结果# feat = [0,1,0,1]# result = getPbfromModel(feat,model,keys)# print(result)# # 遍历结果找到概率最大值进行数据# for key,value in result.items():# if(value == max(result.values())):# print("预测结果是",key)# '''实验二  隐形眼睛数据集'''# 读取数据文件 截取数据和标签with open("train-lenses.txt",'r',encoding="utf-8") as f:lines = f.read().splitlines()dataSet = [line.split('\t') for line in lines]datas = [i[:-1] for i in dataSet]labs = [i[-1] for i in dataSet] # 获取标签种类keys = set(labs)# 进行模型训练model = trainPbmodel(datas,labs)print(model)# 测试# 读取测试文件with open("test-lenses.txt",'r',encoding="utf-8") as f:lines = f.read().splitlines()# 逐行读取数据并测试   for line in lines:data = line.split('\t')lab_true = data[-1]feat = data[:-1]result = getPbfromModel(feat,model,keys)key_out = ""for key,value in result.items():if(value == max(result.values())):key_out=keyprint("输入特征:")print(data)print(result)print("预测结果 %s  医生推荐 %s"%(key_out,lab_true))

运行结果如下:

机器学习——朴素贝叶斯(Naive Bayes)详解及其python仿真相关推荐

  1. 机器学习一:朴素贝叶斯(Naive Bayes)

    朴素贝叶斯 Naive Bayes 1. Introduction 1.1 离散属性 1.2 连续属性 1.2.1 Gaussian Naive Bayes 1.2.2 Multinomial Nai ...

  2. 机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

    目录 一.简介和环境准备 简介: 环境: 二.实战演练 2.1使用葡萄(Wine)数据集,进行贝叶斯分类 1.数据导入 2.模型训练 3.模型预测 2.2模拟离散数据集–贝叶斯分类 1.数据导入.分析 ...

  3. 朴素贝叶斯(naive bayes)

    朴素贝叶斯(naive bayes) 标签: Python 机器学习 主要參考资料:<机器学习实战><统计学习方法> 1.朴素贝叶斯分类原理 朴素贝叶斯法是基于贝叶斯定理和特征 ...

  4. 【手写算法实现】 之 朴素贝叶斯 Naive Bayes 篇

    [手写算法实现] 之 朴素贝叶斯 Naive Bayes 篇 朴素贝叶斯模型(naive bayes)属于分类模型,也是最为简单的概率图模型,对于之后理解HMM.CRF等模型,大有裨益.这里手写算法介 ...

  5. 【机器学习】朴素贝叶斯(Naive Bayes)

    在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系, ...

  6. 机器学习笔记——朴素贝叶斯(Naive Bayes)

    1贝叶斯算法简介 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法.在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算 ...

  7. 西瓜书+实战+吴恩达机器学习(八)监督学习之朴素贝叶斯 Naive Bayes

    文章目录 0. 前言 1. 朴素贝叶斯算法 2. 半朴素贝叶斯算法 2.1. ODE 2.2. SPODE 2.3. TAN 2.4. AODE 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔 ...

  8. 机器学习(十)分类算法之朴素贝叶斯(Naive Bayes)算法

    贝叶斯定理 首先我们来了解一下贝叶斯定理: 贝叶斯定理是用来做什么的?简单说,概率预测:某个条件下,一件事发生的概率是多大? 了解一下公式 事件B发生的条件下,事件A发生的概率为: 这里写图片描述 同 ...

  9. 机器学习算法: 朴素贝叶斯(Naive Bayes)

    朴素贝叶斯的介绍 朴素贝叶斯算法(Naive Bayes, NB) 是应用最为广泛的分类算法之一.它是基于贝叶斯定义和特征条件独立假设的分类器方法.由于朴素贝叶斯法基于贝叶斯公式计算得到,有着坚实的数 ...

  10. 朴素贝叶斯(Naive Bayes),“Naive”在何处?

    加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes). Naive的发音是"乃一污",意思是"朴素的"."幼稚的".&q ...

最新文章

  1. JAVA实现链表面试题
  2. XGBoost的PU-Learning
  3. 嵌入式实时系统程序开发一:按键程序编写
  4. 使用mysql制作学生成绩单_【实例讲解】快速制作学生成绩单
  5. python总结字典集合列表_python 列表,元组,字典,集合,字符串相互转换
  6. 别只关注GPT3!细如发丝的模型更具现实杀伤力!
  7. php中div重叠,div重叠问题
  8. undefined reference to `major‘
  9. cad插入块_CAD中的块,用得好,画图快人一步!
  10. TortoiseGit安装中文语言包无法切换语言
  11. HDFS与HBASE的动态节点的扩容(增删)小白级(二)
  12. 《Web前端开发技术》笔记
  13. H5游戏开发包括哪些游戏类型
  14. win7宽带无法连接解决方法
  15. 【无线网络技术】WLAN技术学习笔记
  16. 原生JS编写简单的编辑器
  17. 阿里云国际中什么是边缘运算?
  18. 如何在线制作APP图标?
  19. RK3399 ,64位,Ubuntu16.04系统安装ROS-kinetic方法总结
  20. MIMIC-iv数据库官方SQL查询语句标注和初步探索性分析(一)--多种疾病的收录的人数

热门文章

  1. gre复习资料推荐整理
  2. 图形数据库之Neo4j学习(一)
  3. 又来汇丰软件(广东)的帖子了。。。
  4. 【信管9.3】项目干系人管理
  5. java JDBC事务和JTA事务详解
  6. 推荐几款pdf文件转Excel表格转换器 注册码
  7. Prometheus监控搭建(4)PrometheusAlert 配置
  8. CAXA电子图版2016破解补丁
  9. 《雨的印记》经典的钢琴曲
  10. 棋牌平台短期内如何获得大量玩家