一、贝叶斯概念

贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类。由于其有着坚实的数学基础,贝叶斯分类算法的误判率是很低的。贝叶斯方法的特点是结合先验概率和后验概率,即避免了只使用先验概率的主观偏见,也避免了单独使用样本信息的过拟合现象。贝叶斯分类算法在数据集较大的情况下表现出较高的准确率,同时算法本身也比较简单。([1]朱军,胡文波.贝叶斯机器学习前沿进展综述[J].计算机研究与发展,2015,52(01):16-26.)

二、朴素贝叶斯

朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。([2]马刚. 朴素贝叶斯算法的改进与应用[D].安徽大学,2018.)

三、分类原理

朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入 求出使得后验概率最大的输出 。

设有样本数据集,对应样本数据的特征属性集为,类变量为,即D可以分为ym类别。其中相互独立且随机,则Y的先验概率,Y的后验概率,由朴素贝叶斯算法可得,后验概率可以由先验概率、证据、类条件概率计算出:

朴素贝叶斯基于各特征之间相互独立,在给定类别为y的情况下,上式可以进一步表示为下式:

由以上两式可以计算出后验概率为:

由于P(X)的大小是固定不变的,因此在比较后验概率时,只比较上式的分子部分即可。因此可以得到一个样本数据属于类别的朴素贝叶斯计算:

四、由临床症状和体征预测疾病发生情况

疾病+症状/体征的数据样式如图:

数据维度:疾病数量3481个,即拥有3481个分类标签;临床表现+症状+体征总共14156个特征标签,即疾病的特征维度的长度为14156。

由疾病症状和体征去预测疾病的缺陷:疾病的症状发生条件并非相互独立,比如恶心和呕吐关联性非常高。其次,疾病症状和体征发生相应疾病的概率难以测定,因为缺乏相应的数据集。所以,大家一定要谨慎思考自己的需求和设定。

五、数据处理过程及参考代码

(1)清洗数据:

把疾病症状和体征转化为可训练的数据集:

把疾病标签转为相应的可训练数据集;

import pandas as pddf_01 = pd.read_excel('临床体征.xlsx')
df_01.head(2)def cord2id(list):dic = {}list = set(list)for id,word in enumerate(list):dic[word] = idreturn dic#把疾病和症状转为id字典
dis2id = cord2id(df_01.entity.to_list())
zhengzhuang2id = cord2id(df_01.value.to_list())dic_tezheng = {}
for i in df_01.values:try:dic_tezheng[dis2id[i[0]]] += [zhengzhuang2id[i[2]]]except:dic_tezheng[dis2id[i[0]]] = [zhengzhuang2id[i[2]]]def xandy(dic):x = []y = []for i in dic.keys():y.append(i)x.append(dic[i])return x,y#训练集
x_tezheng,y_jibing = xandy(dic_tezheng)

(2)转为array格式:

特征向量维度(3481,14156):

import numpy as npx_arry = np.zeros((3481,14156))for index_i,i in enumerate(x_tezheng):for j in i:x_arry[index_i,j] = 1#验证
print(y_arry[0,1831])>>> 1.0

(3)训练数据(我偷懒了,直接调包):

from sklearn.naive_bayes import GaussianNBclf = GaussianNB().fit(x_arry,y_jibing)

(4)验证数据:

text='细菌感染,活动受限,心肌病,心肌炎,咀嚼困难'

#数据预处理
ceshi = text.split(',')
ceshi2id = [zhengzhuang2id[i] for i in ceshi]#数据转化array
x_ceshi = np.zeros((14156,))
for i in ceshi2id:x_ceshi[i] = 1#数据预测结果
y_yuce = clf.predict([x_ceshi])for i in dis2id.keys():if dis2id[i] == y_yuce_id:print(i)

输出结果:“多发性肌炎-皮肌炎”

总结!总结!总结!:

怎么说呢,朴素贝叶斯模型根据疾病和症状去预测疾病,数据集是一个大问题!!!,我整理的数据集还是远远不够,所以效果一般,而且数据集的构造和特征制定是需要扩充的,比如我整理的数据是x1+x2+x3+...+xn = yi ,但实际情况是x1→yi,或者x2→yi,或者x1+x3→yi,这也是是数据集扩充的一种方法。

大家可以去自由发挥啦!

Python 基于朴素贝叶斯根据症状预测疾病,疾病预测模型相关推荐

  1. python基于朴素贝叶斯模型的预测概率和标签信息可视化ROC曲线

    python基于朴素贝叶斯模型的预测概率和标签信息可视化ROC曲线 目录 python基于朴素贝叶斯模型的预测概率和标签信息可视化ROC曲线

  2. python朴素贝叶斯对wine_基于朴素贝叶斯对Wine数据集分类

    夏赵建+杜友福 摘要:为了解决由于葡萄酒的组成成分十分复杂与多样而导致它的类型分类与品质划分困难的问题,减少由于感官评审法对葡萄酒的评测周期长.影响因素多,主观性强和重复性差以及近红外光谱和三维荧光光 ...

  3. 机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

    机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 作者:i阿极 作者简介:Python领域新星作者.多项比赛获奖者:博主个人首页

  4. 基于Python的情感极性判断(基于规则、基于逻辑回归、基于朴素贝叶斯)

    资源下载地址:https://download.csdn.net/download/sheziqiong/85734418 资源下载地址:https://download.csdn.net/downl ...

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

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

  6. 基于朴素贝叶斯的垃圾分类算法(Python实现)

    有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...

  7. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  8. NLP之NBGBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva)、梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测)

    NLP之NB&GBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva).梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测) ...

  9. 基于朴素贝叶斯+Python实现垃圾邮件分类和结果分析

    基于朴素贝叶斯+Python实现垃圾邮件分类 朴素贝叶斯原理 请参考: 贝叶斯推断及其互联网应用(二):过滤垃圾邮件 Python实现 源代码主干来自: python实现贝叶斯推断--垃圾邮件分类 我 ...

最新文章

  1. php将数组最后一个单元弹出,php array_pop()数组函数将数组最后一个单元弹出(出栈)...
  2. 京东电商推荐系统实践
  3. (47)逆向分析 KiSystemService 函数填充 _KTRAP_FRAME 部分
  4. Python 去除序列s中的重复元素
  5. 基于神经网络模型的文本语义通顺度计算研究-全文复现(还没弄完)
  6. RequireJS模块的建立:插件化体验 - demo演示篇
  7. 数据结构与算法之美 02 | 如何抓住重点
  8. 九度OJ 1059:abc
  9. XP共享拒绝访问,全面解决
  10. 我的美丽天使(My Fair Angel)全剧情攻略
  11. 安卓滚动字幕以及TextSwitcher、ImageSwitcher使用
  12. MAC上编译OpenCV
  13. Labview调用python
  14. java中 this详解
  15. 这是你了解的P2P 么?
  16. QQ的常用快捷键大全
  17. snapchat第三方登录回验(服务器端)
  18. 怎样治愈游走性神经痛,游走性神经痛能治愈吗
  19. web前端从学习到学废
  20. kdj指标主要看哪个值_kdj主要看哪条线?kdj指标看哪个值。

热门文章

  1. 目标检测扩散模型DiffusionDet登场,扩散模型正在不同任务中“扩散”
  2. 手写SHA1加密算法(Java版)
  3. 04--简单菜单使用
  4. 连接被远程服务器中断,Windows 2008远程桌面3389连接上后会被立即断开,并提示“远程桌面会话已结束”解决方案...
  5. 健身体训练课程营销活动宣传视频PR模板 MOGRT
  6. abaqus黑盒猜测和理论学习: S4R 单元的实现方式 板壳、梁理论
  7. 国产数据库“向未来”
  8. arcgis几何修复有作用吗_ArcGIS修复几何错误
  9. Xilinx SYSMON的应用
  10. Map小结(java)