import numpy as np"""
函数说明:创建实验样本
Parameters:无
Returns:postingList - 实验样本切分的词条classList - 类别标签
Modify:2019-03-23
"""def loadDataSet():postingList = [["打喷嚏", "护士"],["打喷嚏", "农夫"],["头痛", "建筑工人"],["头痛", "建筑工人"],["打喷嚏", "教师"],["头痛", "教师"]]classList = ["感冒", "过敏", "脑震荡", "感冒", "感冒", "脑震荡"]print("词条集合:\n", np.array(postingList))print("标签集合:\n", classList)return postingList, classList"""
函数说明:生成“词汇表”
Parameters:postingList - 实验样本划分的词条classList - 标签
Returns:vocabulary - 词汇表labels - 标签表
Modify:2019-03-23
"""def createVocabulary(postingList, classList):vocabulary = []for words in postingList:for word in words:if word not in vocabulary:vocabulary.append(word)print("字典:\n", vocabulary)labels = []for lab in classList:if lab not in labels:labels.append(lab)print("标签表:\n", labels)return vocabulary, labels"""
函数说明:词条向量化、标签向量化
Parameters:postingList - 划分好的词条集合classList - 便签集合vocabulary - 词汇表labels - 标签表
Returns:postingVec - 向量化词条classVec - 向量化标签
Modify:
"""def vector(postingList, classList, vocabulary, labels):# 词条向量化postingVecSet = []  # 词条向量的集合for words in postingList:postingVec = [0] * len(vocabulary)for i in range(len(words)):if words[i] in vocabulary:postingVec[vocabulary.index(words[i])] = 1postingVecSet.append(postingVec)# 标签向量化classVec = []for i in range(len(classList)):classVec.append(labels.index(classList[i]))print("向量化词条;\n", np.array(postingVecSet))print("向量化标签:\n", classVec)return postingVecSet, classVec"""
函数说明:朴素贝叶斯分类器训练器
Parameters:postingVecSet - 向量化词条classVec - 向量化标签
Returns:P0Vector - [ P( 感冒 |症状、职业) ]P1Vector - [ P( 过敏 |症状、职业) ]P2Vector - [ P(脑震荡|症状、职业) ]PA - P( 感冒 )PB - P( 过敏 )PC - P(脑震荡)
Modify:2019-03-23
"""def train(postingVecSet, classVec):PA = 0PB = 0PC = 0for disease in classVec:if disease == 0:  # 统计感冒数PA += 1elif disease == 1:  # 统计过敏数PB += 1else:  # 统计脑震荡数PC += 1# 计算 P(感冒) P(过敏) P(脑震荡)PA = PA / float(len(classVec))  # P(感冒)PB = PB / float(len(classVec))  # P(过敏)PC = PC / float(len(classVec))  # P(脑震荡)print("感冒概率:", PA, "过敏概率:", PB, "脑震荡概率:", PC)P0Vector = np.ones(len(postingVecSet[0]))P1Vector = np.ones(len(postingVecSet[0]))P2Vector = np.ones(len(postingVecSet[0]))P0Demon = 2.0P1Demon = 2.0P2Demon = 2.0for i in range(len(classVec)):if classVec[i] == 0:P0Vector += postingVecSet[i]P0Demon += sum(postingVecSet[i])elif classVec[i] == 1:P1Vector += postingVecSet[i]P1Demon += sum(postingVecSet[i])else:P2Vector += postingVecSet[i]P2Demon += sum(postingVecSet[i])P0Vector = np.log(P0Vector / P0Demon)P1Vector = np.log(P1Vector / P1Demon)P2Vector = np.log(P2Vector / P2Demon)print("P0Vector:", P0Vector)print("P1Vector:", P1Vector)print("P2Vector:", P2Vector)return PA, PB, PC, P0Vector, P1Vector, P2Vector"""
函数说明:使用分类器进行分类
Parameters:test - 测试用例(向量)P0Vector - [ P( 感冒 |症状、职业) ]P1Vector - [ P( 过敏 |症状、职业) ]P2Vector - [ P(脑震荡|症状、职业) ]PA - P( 感冒 )PB - P( 过敏 )PC - P(脑震荡)
Returns:0 - 感冒1 - 过敏2 - 脑震荡
Modify:2019-03-23
"""def classification(test, P0Vector, P1Vector, P2Vector, PA, PB, PC):PA = sum(P0Vector * test) + np.log(PA)PB = sum(P1Vector * test) + np.log(PB)PC = sum(P2Vector * test) + np.log(PC)print("感冒的概率:", PA, "过敏的概率:", PB, "脑震荡的概率:", PC)if max(PA, PB, PC) == PA:print("最可能的疾病:感冒")elif max(PA, PB, PC) == PB:print("最可能的疾病:过敏")else:print("最可能的疾病:脑震荡")return max(PA, PB, PC)if __name__ == '__main__':postingList, classList = loadDataSet()vocabulary, labels = createVocabulary(postingList, classList)postingVecSet, classVec = vector(postingList, classList, vocabulary, labels)PA, PB, PC, P0Vector, P1Vector, P2Vector = train(postingVecSet, classVec)for zhengZhuang in ['打喷嚏', '头痛']:for zhiYe in ['护士', '农夫', '建筑工人', '教师']:test = np.zeros(len(vocabulary))test[vocabulary.index(zhengZhuang)] = 1test[vocabulary.index(zhiYe)] = 1print("症状:", zhengZhuang, "职业:", zhiYe)classification(test, P0Vector, P1Vector, P2Vector, PA, PB, PC)print("\n")

运行结果:

D:\PyCharm\Projects\MachineLearning\venv\Scripts\python.exe D:/PyCharm/Projects/MachineLearning/BeiYesi_YiYuan.py
词条集合:[['打喷嚏' '护士']['打喷嚏' '农夫']['头痛' '建筑工人']['头痛' '建筑工人']['打喷嚏' '教师']['头痛' '教师']]
标签集合:['感冒', '过敏', '脑震荡', '感冒', '感冒', '脑震荡']
字典:['打喷嚏', '护士', '农夫', '头痛', '建筑工人', '教师']
标签表:['感冒', '过敏', '脑震荡']
向量化词条;[[1 1 0 0 0 0][1 0 1 0 0 0][0 0 0 1 1 0][0 0 0 1 1 0][1 0 0 0 0 1][0 0 0 1 0 1]]
向量化标签:[0, 1, 2, 0, 0, 2]
感冒概率: 0.5 过敏概率: 0.16666666666666666 脑震荡概率: 0.3333333333333333
P0Vector: [-0.98082925 -1.38629436 -2.07944154 -1.38629436 -1.38629436 -1.38629436]
P1Vector: [-0.69314718 -1.38629436 -0.69314718 -1.38629436 -1.38629436 -1.38629436]
P2Vector: [-1.79175947 -1.79175947 -1.79175947 -0.69314718 -1.09861229 -1.09861229]
症状: 打喷嚏 职业: 护士
感冒的概率: -3.0602707946915624 过敏的概率: -3.8712010109078907 脑震荡的概率: -4.68213122712422
最可能的疾病:感冒症状: 打喷嚏 职业: 农夫
感冒的概率: -3.7534179752515073 过敏的概率: -3.1780538303479453 脑震荡的概率: -4.68213122712422
最可能的疾病:过敏症状: 打喷嚏 职业: 建筑工人
感冒的概率: -3.0602707946915624 过敏的概率: -3.8712010109078907 脑震荡的概率: -3.9889840465642745
最可能的疾病:感冒症状: 打喷嚏 职业: 教师
感冒的概率: -3.0602707946915624 过敏的概率: -3.8712010109078907 脑震荡的概率: -3.9889840465642745
最可能的疾病:感冒症状: 头痛 职业: 护士
感冒的概率: -3.4657359027997265 过敏的概率: -4.564348191467836 脑震荡的概率: -3.58351893845611
最可能的疾病:感冒症状: 头痛 职业: 农夫
感冒的概率: -4.1588830833596715 过敏的概率: -3.8712010109078907 脑震荡的概率: -3.58351893845611
最可能的疾病:脑震荡症状: 头痛 职业: 建筑工人
感冒的概率: -3.4657359027997265 过敏的概率: -4.564348191467836 脑震荡的概率: -2.8903717578961645
最可能的疾病:脑震荡症状: 头痛 职业: 教师
感冒的概率: -3.4657359027997265 过敏的概率: -4.564348191467836 脑震荡的概率: -2.8903717578961645
最可能的疾病:脑震荡Process finished with exit code 0

机器学习实战_朴素贝叶斯分类器_预测疾病相关推荐

  1. sklearn朴素贝叶斯分类器_机器学习06——朴素贝叶斯

    一.概率公式: 条件概率公式: 事件A发生的条件下,事件B发生的概率=事件A和事件B同时发生的概率/事件A发生的概率 P(AB)=P(A)*P(B|A) 事件A和事件B同时发生的概率=事件A发生的概率 ...

  2. 多项式朴素贝叶斯分类器_多项式朴素贝叶斯分类器的主题预测

    多项式朴素贝叶斯分类器 In Analytics Vidhya, Hackathon, there was a problem statement for text prediction of top ...

  3. sklearn朴素贝叶斯分类器_手撕朴素贝叶斯分类器源码(Naive Bayesian)

    鋌~(最近压力略大,好久没有更新,xixixi),今天的主题是朴素贝叶斯分类器,NB这个缩写真是绝了,确实值得这个缩写,哈哈哈.今天跟大家聊一聊朴素贝叶斯分类器的基本原理和代码编写.贝叶斯分类器的基本 ...

  4. python贝叶斯分类器_朴素贝叶斯分类器的简单Python实现

    本文介绍如何使用Python实现一个简易的朴素贝叶斯分类器(Naive Baves classifier). 贝叶斯公式 我们先简单回顾一下贝叶斯公式: 其中,我们称P(A)和P(B)为先验概率,P( ...

  5. 朴素贝叶斯分类器_基于环境光补偿二进制图像对架空复合绝缘子进行疏水性判断的朴素贝叶斯分类器...

    关注高电压技术,关注学科发展 内容整理自<High Voltage>2019年第4卷第4期 由Rajamohan Jayabal :Vijayarekha Karuppiyan ; Rak ...

  6. 机器学习基础:朴素贝叶斯分类器及其应用示例

    贝叶斯定理 \[ { P(h|D)=\frac{P(D|h)P(h)}{P(D)} \tag{1}} \] 贝叶斯分类 假设每一个实例\(x\)可以用\(n\)项特征来描述,分别为\(a_1,a_2, ...

  7. sklearn朴素贝叶斯分类器_朴素贝叶斯原理

    贝叶斯分类算法是统计学是一种概率分类方法,朴素贝叶斯分类时贝叶斯分类中最简单的一种.利用贝叶斯公式根据某特征的先验概率计算出其后延概率,然后选择具有最大后延概率的类作为该特征所属的类.朴素贝叶斯,称之 ...

  8. java 朴素贝叶斯_朴素贝叶斯分类器和一般的贝叶斯分类器有什么区别?

    我根据自己理解,给出朴素贝叶斯分类算法的核心,在里面会有通俗详细的解释,希望对你有帮助~ 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.而朴素朴素贝叶斯分类是贝叶斯 ...

  9. 朴素贝叶斯分类器简介及C++实现(性别分类)

    贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器. 在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器.朴素贝叶斯是文本分类的一种热门(基准)方法 ...

最新文章

  1. 蚌埠计算机对口招学生谈谈,蚌埠市865人报名对口高考
  2. (详细全面)softmax和log_softmax的联系和区别,NLLLOSS和CrossEntropyLoss的联系和区别
  3. 疫情之下,MWC 2020正式取消!此前仍有中国公司表态坚持参展
  4. Python print函数不换行操作
  5. 如何在java中实现跨线程的通讯
  6. 数据在计算机中的存储
  7. 文件的 MD5 签名介绍
  8. 用excel打开文本内容
  9. 通过银行卡号,识别相应的银行信息
  10. ssfn授权_Steam盗号木马窃取授权文件,360安全大脑强力拦截
  11. (10)ERStudio
  12. emd经验模态分解 matlab,经验模态分解(EMD)在地球物理资料中的应用(附MATLAB程序)...
  13. 【Python3】23.求平方根---牛顿迭代法
  14. Android 11 system_server 读写 SDCARD
  15. Power BI 中文版下载方式
  16. 爬虫07 爬取阿里旅行特价机票
  17. 如何让机器理解汉字一笔一画的奥秘?
  18. miui android系统 流量,[Android] 小米云流量最新魔改领100G流量教程
  19. VS2015 + QT 编译出现public: virtual struct QMetaObject const * __thiscall 错误
  20. 字节跳动一面c++视频面试(第二个部门,效率工程部门)(一面通过)

热门文章

  1. wannacry 勒索病毒_WannaCry:勒索软件尸检
  2. 第4章 控制执行流程
  3. 修改安卓系统应用,将自己的app变成系统应用
  4. signature=f2fd61184b3328e471644f6fd3617f29,IPSEC-×××-CA
  5. visibility与display的区别:
  6. 消费金融成新增长极,江苏银行零售转型如虎添翼
  7. 宽依赖和窄依赖_Spark宽依赖和窄依赖深度剖析
  8. c语言窄字符转换为宽字符,将窄字符串转换为宽字符串
  9. 安装blockchain-explorer区块浏览器
  10. mount时报错 host is down