#!/usr/bin/python#-*- coding: utf-8 -*-##########################################Bayes : 用来描述两个条件概率之间的关系

#参数: inX: vector to compare to existing dataset (1xN)#dataSet: size m data set of known vectors (NxM)#labels: data set labels (1xM vector)#公式:P(A|B)=P(B|A)P(A)/P(B)#输出: 出错率#########################################

importnumpy as npyimportosimporttime#P(B|A)=P(A|B)*P(A)/P(B)

#数据集目录

dataSetDir ='E:/digits/'

classBayes:def __init__(self):

self.length=-1self.labelrate=dict()

self.vectorrate=dict()deffit(self,dataset:list,labels:list):print("训练开始")if len(dataset)!=len(labels):raise ValueError("输入测试数组和类别数组长度不一致")

self.length=len(dataset[0])#训练数据特征值的长度

labelsnum=len(labels) #类别的数量

norlabels=set(labels) #不重复类别的数量

for item innorlabels:

self.labelrate[item]=labels.count(item)/labelsnum #求当前类别占总类别的比例

for vector,label inzip(dataset,labels):if label not inself.vectorrate:

self.vectorrate[label]=[]

self.vectorrate[label].append(vector)print("训练结束")returnselfdefbtest(self,testdata,labelset):if self.length==-1:raise ValueError("未开始训练,先训练")#计算testdata分别为各个类别的概率

lbDict=dict()for thislb inlabelset:

p= 1alllabel=self.labelrate[thislb]

allvector=self.vectorrate[thislb]

vnum=len(allvector)

allvector=npy.array(allvector).Tfor index inrange(0,len(testdata)):

vector=list(allvector[index])

p*=vector.count(testdata[index])/vnum

lbDict[thislb]=p *alllabel

thislbabel=sorted(lbDict,key=lambda x:lbDict[x],reverse=True)[0]returnthislbabel#加载数据

defdatatoarray(fname):

arr=[]

fh=open(fname)for i in range(0,32):

thisline=fh.readline()for j in range(0 , 32):

arr.append(int(thisline[j]))returnarr#建立一个函数取出labels

defseplabel(fname):

filestr=fname.split(".")[0]

label=int(filestr.split("_")[0])returnlabel#建立训练数据

deftraindata():

labels=[]

trainfile=os.listdir(dataSetDir+"trainingDigits") #加载测试数据

num=len(trainfile)

trainarr=npy.zeros((num,1024))for i inrange(num):

thisfname=trainfile[i]

thislabel=seplabel(thisfname)

labels.append(thislabel)

trainarr[i,]=datatoarray(dataSetDir+"trainingDigits/"+thisfname)returntrainarr,labels#贝叶斯算法手写识别主流程

bys=Bayes()

start=time.time()## step 1: 训练数据集

train_data,labels=traindata()

train_data=list(train_data)

bys.fit(train_data,labels)## step 2:测试数据集

thisdata=datatoarray(dataSetDir+"testDigits/8_90.txt")

labelsall=[0,1,2,3,4,5,6,7,8,9]## 识别单个手写体数字#test=bys.btest(thisdata,labelsall)#print(test)

## 识别多个手写体数字(批量处理),并输出结果

testfile=os.listdir(dataSetDir+"testDigits")

num=len(testfile)

x=0for i inrange(num):

thisfilename=testfile[i]

thislabel=seplabel(thisfilename)

thisdataarr=datatoarray(dataSetDir+"testDigits/"+thisfilename)

label=bys.btest(thisdataarr,labelsall)print("测试数字是:"+str(thislabel)+"识别出来的数字是:"+str(label))if label!=thislabel:

x+=1

print("识别出错")print(x)print("出错率:"+str(x/num))

end=time.time()

running_time= end-startprint('程序运行总耗时: %.5f sec' %running_time)

手写字体识别用python实现_利用贝叶斯算法实现手写体识别(Python)相关推荐

  1. python贝叶斯算法的论文_朴素贝叶斯算法从入门到Python实践

    1,前言 很久不发文章,整理些干货,希望相互学习吧.进入主题,本文主要时说的为朴素贝叶斯分类算法.与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的 ...

  2. 用python实现朴素贝叶斯算法_朴素贝叶斯算法 python 实现

    应用贝叶斯准则: 使用上面这些定义,可以定义贝叶斯分类准则为: 如果 P(c1|x, y) > P(c2|x, y), 那么属于类别 c1; 如果 P(c2|x, y) > P(c1|x, ...

  3. java mllib 算法_朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  4. 机器学习:朴素贝叶斯算法+中文情感分类+python

    朴素贝叶斯中文情感分类 1.写在前面 朴素贝叶斯算法理论在很多博客上已经解释的很详细了,本文就不再叙述,本文注重于算法的应用以及编程实现,在读取前人的博客以及他们的项目应用,本人结合书本<机器学 ...

  5. python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...

  6. 朴素贝叶斯算法详解及python代码实现

    朴素贝叶斯算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python)(待更.......) 算法原理 P(Ck∣xi)=p(xi∣ck)∗p(ck)p(xi)=p(x1∣c ...

  7. 算法的优缺点_朴素贝叶斯算法的优缺点

      机器学习算法与自然语言处理推荐  来源:http://www.cnblogs.com/pinard/p/6069267.html 作者:刘建平Pinard [机器学习算法与自然语言处理导读]朴素贝 ...

  8. python实现排列组合公式算法_朴素贝叶斯算法的Python实现

    朴素贝叶斯分类算法被广泛应用于文本分类场景中.包含垃圾邮件.互联网新闻等分类任务,属于有监督学习算法.它独立考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即&quo ...

  9. python推荐系统算法朴素贝叶斯_朴素贝叶斯算法在人才盘点中的应用(之一)

    一.识别人才首先是处理不确定性问题 做招聘面试的HR应该会认同这样的经历. 打开应聘者简历,赫然写着TOP10名学毕业.抬头一瞧,小伙长得一表人才,精神抖擞,朝气蓬勃.HR兴趣大增. 再一看,研究方向 ...

最新文章

  1. 得到当前数据库中所有用户表信息
  2. 李宏毅深度学习——Backpropagation
  3. 一次性通过软考网工方案
  4. 一次搞定各种数据库SQL执行计划
  5. 计算机学院班徽在线设计,计算机学院班徽班旗设计大赛通讯稿
  6. 常用MySQ调优策略及相关分享:学习随记
  7. python不同数据类型的式子_Python 基础篇:数据类型、数据运算、表达
  8. 玩转算法面试:(一)什么是算法面试?
  9. Python + Selenium 自动发布文章(一):开源中国
  10. java船_Java-货船
  11. Spring Boot 文件上传下载、url 映射虚拟路径、解决下载文件名称乱码
  12. excel数据库_EXCEL数据库函数dcount、dcounta
  13. 啊哈C——学习2.5一起来找茬
  14. 微信小程序登录授权开发
  15. CDN 网站部署全站加速服务
  16. 22种免费网络推广方式有哪些?
  17. python虚拟变量回归_第二周:python实现线性回归(哑变量回归)的高效方法
  18. 低光图像增强(Low-light image enhancement)文章整理
  19. android ps2 模拟器,手机目前安卓系统PS2模拟器最好用的是一款叫做呆萌PS2模拟器的APP!这一款竟然是国产的!...
  20. 给自己的网站添加在线客服代码

热门文章

  1. 象牙色优雅图像LR预设
  2. Inno Setup入门 (软件打包工具)学习笔记 (26课全)
  3. 隆昌一中高考成绩查询2021四川,四川内江排名靠前的四大高中,有争议?2020年高考成绩说话!...
  4. 关于ie浏览器的插件IEDevToolBar 和DebugBar安装问题
  5. eNSP抓包看PPP协议
  6. 开源至上:java前端框架排行
  7. 传智播客 mysql视频_MySQL数据库传智播客视频教程【43集】
  8. 阿里巴巴私有化:B2B夕阳西下 马云布局大阿里
  9. 云计算模型 按需自助服务_数据中心云计算的安全策略
  10. Informix IDS 11琐屑解决(918测验)认证指南,第 7 部分: IDS复制(4)