手写字体识别用python实现_利用贝叶斯算法实现手写体识别(Python)
#!/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)相关推荐
- python贝叶斯算法的论文_朴素贝叶斯算法从入门到Python实践
1,前言 很久不发文章,整理些干货,希望相互学习吧.进入主题,本文主要时说的为朴素贝叶斯分类算法.与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的 ...
- 用python实现朴素贝叶斯算法_朴素贝叶斯算法 python 实现
应用贝叶斯准则: 使用上面这些定义,可以定义贝叶斯分类准则为: 如果 P(c1|x, y) > P(c2|x, y), 那么属于类别 c1; 如果 P(c2|x, y) > P(c1|x, ...
- java mllib 算法_朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)
朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...
- 机器学习:朴素贝叶斯算法+中文情感分类+python
朴素贝叶斯中文情感分类 1.写在前面 朴素贝叶斯算法理论在很多博客上已经解释的很详细了,本文就不再叙述,本文注重于算法的应用以及编程实现,在读取前人的博客以及他们的项目应用,本人结合书本<机器学 ...
- python:基于朴素贝叶斯算法的垃圾邮件过滤分类
目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...
- 朴素贝叶斯算法详解及python代码实现
朴素贝叶斯算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python)(待更.......) 算法原理 P(Ck∣xi)=p(xi∣ck)∗p(ck)p(xi)=p(x1∣c ...
- 算法的优缺点_朴素贝叶斯算法的优缺点
机器学习算法与自然语言处理推荐 来源:http://www.cnblogs.com/pinard/p/6069267.html 作者:刘建平Pinard [机器学习算法与自然语言处理导读]朴素贝 ...
- python实现排列组合公式算法_朴素贝叶斯算法的Python实现
朴素贝叶斯分类算法被广泛应用于文本分类场景中.包含垃圾邮件.互联网新闻等分类任务,属于有监督学习算法.它独立考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即&quo ...
- python推荐系统算法朴素贝叶斯_朴素贝叶斯算法在人才盘点中的应用(之一)
一.识别人才首先是处理不确定性问题 做招聘面试的HR应该会认同这样的经历. 打开应聘者简历,赫然写着TOP10名学毕业.抬头一瞧,小伙长得一表人才,精神抖擞,朝气蓬勃.HR兴趣大增. 再一看,研究方向 ...
最新文章
- 得到当前数据库中所有用户表信息
- 李宏毅深度学习——Backpropagation
- 一次性通过软考网工方案
- 一次搞定各种数据库SQL执行计划
- 计算机学院班徽在线设计,计算机学院班徽班旗设计大赛通讯稿
- 常用MySQ调优策略及相关分享:学习随记
- python不同数据类型的式子_Python 基础篇:数据类型、数据运算、表达
- 玩转算法面试:(一)什么是算法面试?
- Python + Selenium 自动发布文章(一):开源中国
- java船_Java-货船
- Spring Boot 文件上传下载、url 映射虚拟路径、解决下载文件名称乱码
- excel数据库_EXCEL数据库函数dcount、dcounta
- 啊哈C——学习2.5一起来找茬
- 微信小程序登录授权开发
- CDN 网站部署全站加速服务
- 22种免费网络推广方式有哪些?
- python虚拟变量回归_第二周:python实现线性回归(哑变量回归)的高效方法
- 低光图像增强(Low-light image enhancement)文章整理
- android ps2 模拟器,手机目前安卓系统PS2模拟器最好用的是一款叫做呆萌PS2模拟器的APP!这一款竟然是国产的!...
- 给自己的网站添加在线客服代码
热门文章
- 象牙色优雅图像LR预设
- Inno Setup入门 (软件打包工具)学习笔记 (26课全)
- 隆昌一中高考成绩查询2021四川,四川内江排名靠前的四大高中,有争议?2020年高考成绩说话!...
- 关于ie浏览器的插件IEDevToolBar 和DebugBar安装问题
- eNSP抓包看PPP协议
- 开源至上:java前端框架排行
- 传智播客 mysql视频_MySQL数据库传智播客视频教程【43集】
- 阿里巴巴私有化:B2B夕阳西下 马云布局大阿里
- 云计算模型 按需自助服务_数据中心云计算的安全策略
- Informix IDS 11琐屑解决(918测验)认证指南,第 7 部分: IDS复制(4)