文章代码来自博客贝叶斯分类器,在这篇博客代码的基础上稍作修改

用朴素贝叶斯法实现对水果分类:

文件结构:

bayes_classfier. py

#贝叶斯分类器
datasets={'banala':{'long':400,'not_long':100,'sweet':350,'not_sweet':150,'yellow':450,'not_yellow':50},'orange':{'long':0,'not_long':300,'sweet':150,'not_sweet':150,'yellow':300,'not_yellow':0},'other_fruit':{'long':100,'not_long':100,'sweet':150,'not_sweet':50,'yellow':50,'not_yellow':150}}
def count_total(data):#计算各种水果的总数count={}total=0for fruit in data :count[fruit]=data[fruit]['yellow']+data[fruit]['not_yellow']total+=count[fruit]return count,total#{'banala': 500, 'orange': 300, 'other_fruit': 200}   1000def cal_base_rates(data):#计算各种水果的先验概率,不同水果的占比categories,total=count_total(data)cal_base_rates={}for label in categories:priori_prob=categories[label]/totalcal_base_rates[label]=priori_probreturn cal_base_rates#{'banala': 0.5, 'orange': 0.3, 'other_fruit': 0.2}def likelihold_prob(data):#计算各个特征值在已知水果下的概率count,_=count_total(data)likelihold={}for fruit in data:attr_prob={}for attr in data[fruit]:#计算各个特征值在已知水果下的概率attr_prob[attr]=data[fruit][attr]/count[fruit]likelihold[fruit]=attr_probreturn likelihold#{'banala': {'long': 0.8, 'not_long': 0.2, 'sweet': 0.7, 'not_sweet': 0.3, 'yellow': 0.9, 'not_yellow': 0.1}, 'orange': {'long': 0.0, 'not_long': 1.0, 'sweet': 0.5, 'not_sweet': # 0.5, 'yellow': 1.0, 'not_yellow': 0.0}, 'other_fruit': {'long': 0.5, 'not_long': 0.5, 'sweet': 0.75, 'not_sweet': 0.25, 'yellow': 0.25, 'not_yellow': 0.75}}def evidence_prob(data):#计算特征的概率对分类结果的影响attrs=list(data['banala'].keys())count,total=count_total(data)evidence_prob={}for attr in attrs:attr_total=0for fruit in data:attr_total+=data[fruit][attr]evidence_prob[attr]=attr_total/totalreturn evidence_prob#{'long': 0.5, 'not_long': 0.5, 'sweet': 0.65, 'not_sweet': 0.35, 'yellow': 0.8, 'not_yellow': 0.2}    class navie_bayes_classifier:#初始化贝叶斯分类器,实例化时会调用__ini__函数def __init__(self,data=datasets):self._data=datasetsself._labels=[key for key in self._data.keys()]  #不同的水果self._priori_prob=cal_base_rates(self._data)   #水果先验概率self._likelihole_prob=likelihold_prob(self._data)   #各个特征值下水果的概率self._evidence_prob=evidence_prob(self._data)    #各种特征的概率def get_label(self,length,sweetness,color):self._attrs=[length,sweetness,color]res={}for label in self._labels:prob=self._priori_prob[label] #取某水果占比率#print(label ,"的占比率:",prob)for attr in self._attrs:#单个水果的某个特征概率除以总的某个特征概率 再乘以某水果占比率#print(self._likelihole_prob[label][attr])   #print(self._evidence_prob[attr])#print(self._likelihole_prob[label][attr]/self._evidence_prob[attr])prob*=self._likelihole_prob[label][attr]/self._evidence_prob[attr]#print(prob)res[label]=probreturn res

generate_attires. py

#随机产生测试数据集来测试贝叶斯分类器的预测能力
import random
def rondom_attr(pair):#生成0~1之间的随机数return pair[random.randint(0,1)]def gen_attrs():#特征值的取值集合sets=[('long','not_long'),('sweet','not_sweet'),('yellow','not_yellow')]test_datasets=[]for i in range(3):#使用map函数来生成一组特征值test_datasets.append(list(map(rondom_attr,sets)))return test_datasets

classfication. py

#使用贝叶斯分类器对测试结果进行分类
import operator
import bayes_classfier
import generate_attires
def  main():test_datasets=generate_attires.gen_attrs()#print(test_datasets)classfier =bayes_classfier.navie_bayes_classifier()for data in test_datasets:print("特征值:",end='\t')print(data)print("预测结果:",end='\t')res=classfier.get_label(*data)#表示多参传入print(res)#预测属于哪种水果的概率print('水果类别:',end='\t')#对后验概率排序,输出概率最大的标签print(sorted(res.items(),key=operator.itemgetter(1),reverse=True)[0][0])if __name__ =='__main__':main()

效果展示:

python实现贝叶斯分类器相关推荐

  1. 机器学习之用Python从零实现贝叶斯分类器

    机器学习之用Python从零实现贝叶斯分类器 2015/02/06 · 系列教程 · 13 评论 · 机器学习 分享到:27 本文由 伯乐在线 - Halal 翻译,toolate 校稿.未经许可,禁 ...

  2. python机器学习库sklearn——朴素贝叶斯分类器

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 文档贝叶斯分类器的相关的知 ...

  3. python机器学习案例系列教程——文档分类器,朴素贝叶斯分类器,费舍尔分类器

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 github地址:https://github.com/626626cdllp/data-mining/tree/master/Bay ...

  4. python朴素贝叶斯的文本分类_自给自足,完全手写一个朴素贝叶斯分类器,完成文本分类...

    Part 1: 本文解决的问题: 我在有这样的一个数据集,里面存放了人们对近期播放电影的评价,当然评价也就分成两部分,好评和差评.我们想利用这些数据训练一个模型,然后可以自动的对影评做出判断,到底是好 ...

  5. 利用Python实现多元伯努利事件的朴素贝叶斯分类器

    前言 本篇博客所写的算法对应于吴恩达教授的机器学习教程里的多元伯努利事件模型的朴素贝叶斯. 多元伯努利事件模型的Python代码 #!/usr/bin/env python # -*- coding: ...

  6. python 贝叶斯分类器sklearn_Sklearn 中的朴素贝叶斯分类器

    原标题:Sklearn 中的朴素贝叶斯分类器 作者:Martin Müller,翻译:github-sisibeloved https://github.com/xitu/gold-miner/blo ...

  7. Python小案例:朴素贝叶斯分类器

    朴素贝叶斯分类器是一个以贝叶斯定理为基础,广泛应用于情感分类领域的优美分类器.本文我们尝试使用该分类器来解决上一篇文章中影评态度分类. 1.贝叶斯定理 假设对于某个数据集,随机变量C表示样本为C类的概 ...

  8. python 贝叶斯分类器sklearn_使用sklearn自带的贝叶斯分类器进行文本分类和参数调优...

    数据挖掘入门与实战 公众号: datadw Part 1: 本篇内容简介 在前一篇文章完整手写一个朴素贝叶斯分类器,完成文本分类,我们使用首先假设在文档中出现的单词彼此独立,利用贝叶斯定理,完成了一个 ...

  9. python实现之构建朴实贝叶斯分类器

    给定一个训练集Training-data.txt,构建朴实贝叶斯分类器,并对如下测试用例作出推断: X1 = (age <=30, Income = medium, Student = yes, ...

最新文章

  1. iOS子线程操作总结
  2. mpeg b帧 编码 matlab,一种基于压缩域的镜头检测算法
  3. 【转载】 Searching过程粗略梳理
  4. 21个令程序员泪流满面的瞬间【第二弹】
  5. 问题 1047: [编程入门]报数问题
  6. android 软件盘弹回去的最好体验,Android 软键盘弹出 日常填坑
  7. python泰坦尼克号数据预测_使用python预测泰坦尼克号生还
  8. 确定了C/C++的学习路线之后,便只能是一条路走到黑了
  9. 两年,从月入4K到40K,从来不是努力工作,而是不断跳槽
  10. OFbiz--HelloWorld
  11. android webview 跳转到浏览器,Android WebView或手机浏览器打开连接问题解决办法总结...
  12. origin2018软件下载和安装教程
  13. Scrapy 链家网爬取(存储到MySQL、json、xlsx)
  14. java写的小米商城_开发”小米商城官网首页”(静态页面)
  15. office2019初体验与kms服务器搭建
  16. 北大MBA夫妇不满现有教育系统 携女隐居终南山
  17. ubuntu apt-get install更新域名解析失败问题的处理方法
  18. 平安金融科技移动技术周报(第二期)
  19. 【opencv】18、视频操作
  20. P4233 射命丸文的笔记

热门文章

  1. 从用友软件实施项目反映出的项目管理问题
  2. 马斯克称特斯拉遭到内鬼攻击,公司生产受到破坏性影响
  3. 网易有道面经(2013校园招聘杭州站)zz
  4. ibmmq 通道命令_IBM WebSphere MQ 7.5基本用法
  5. 计算输入字符串的长度c语言,C语言统计输入的字符串的长度
  6. oracle ogc y,OGC标准介绍 7
  7. dnf 运行系统linux,在Linux系统中使用dnf命令安装IceWM,一款非常酷的桌面
  8. 音频静默时间截取工具
  9. Adobe Lightroom Classic 入门教程(六)修改照片 --- 镜头配置文件与变换
  10. 怎么把xml文件到url post方法 android,如何在android中使用http post发送xml文件.我把xml文件放在代码中...