如何写一个简单的手写手写数字识别算法法

&>&&>&&>&&>&一种简单有效的手写体数字特征提取算法
一种简单有效的手写体数字特征提取算法
上传大小:738KB
有效地数字特征提取算法 模式识别中的手写数字识别
综合评分:0(0位用户评分)
所需积分:2
下载次数:27
审核通过送C币
创建者:pilouduo1367
创建者:pilouduo1367
课程推荐相关知识库
上传者其他资源上传者专辑
课程资源热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
一种简单有效的手写体数字特征提取算法
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:基于k-近邻分类算法的手写数字识别
kNN算法表示的是k-近邻算法,是分类数据最简单最有效的算法,算法采用测量不同特征值之间的距离方法进行分类。kNN算法属于分类算法,在机器学习范畴内属于监督学习的范畴。算法的工作原理是:存在一个每个样本数据都已知分类标签的数据样本集,即训练数据集,输入没有分类标签的新数据后,将新数据的每个特征值和样本集中的数据的特征值做比较(计算距离),提取出特征值最相似(距离最小)的前k个数据样本,选择这k个数据中出现频率最高的分类标签作为新数据的分类标签。
  明确算法的原理后,我们着手与实现分类算法并完成手写数字识别的基本功能。我们选择Python最为实现语言,Python在矩阵操作和线性代数操作中有得天独厚的优势。
首先我们实现分类方法,包括:计算当前点与样本集中点之间的距离;按距离排序;选择k个距离最小的点;提起这k个点中出现频率最高的类别作为新的数据点的类别。代码如下:
def classify0(inX, dataSet, labels, k):
&&& dataSetSize
= dataSet.shape[0]
&&& diffMat =
tile(inX, (dataSetSize,1)) - dataSet
&&& sqDiffMat =
diffMat ** 2
&&& sqDistances
= sqDiffMat.sum(axis = 1)
&&& distances =
sqDistances ** 0.5
sortedDistIndicies = distances.argsort()
classCount={}
&&& for i in
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.iteritems(), key =
operator.itemgetter(1), reverse = True)
&&& return
sortedClassCount[0][0]
  其中,shape[0]是获取训练数据集中的数据行数,tile函数是按参数重复某个数组,argsort函数是获取数组从小到大的索引值。最终函数返回的是在labels中的由算法算出的某个标签值。到这里
,分类算法已经完成。基于该分类算法,我们考虑实现手写数字的识别。
  其中我们要用到的训练数据集是已经使用图像处理软件预处理过的数据,最终的数据是宽高都为32像素的黑白图像,然后将图像转换成文本格式来存储。如下图所示:
  分析可得一张图片是一个数据,在这里我们可以用一个矩阵来存储。但是基于我们之前的分类实现,我们需要的整个数据集是一个矩阵,所以数据集中的数据是一个向量才对。因为接下来我们首先要将图片文本处理成一个向量。我们把一个32x
32的矩阵转换成一个1x 1024的向量,代码如下:
def img2vector(filename):
&&& returnVect =
zeros((1,1024))
open(filename)
&&& for i in
range(32):
lineStr = fr.readline()
for j in range(32):
&&&&&&&&&&&
returnVect[0,32*i+j] = int(lineStr[j])
&&& return
returnVect
  然后我们需要构造出训练数据集来,在这里准备了2000个样例文件,存储在trainingDigits目录下。我们活取该目录下所有文件并读取内容构造出一个矩阵作为训练数据集。这2000个样例文件所表示的数字确定,通过文件名来获取表示的数字。文件名形如:0_56.txt,表示该文件表示的手写数字为0。构造的代码如下所示:
def createHandwritingTrainMat():
&&& hwLabels =
trainingFileList = listdir('trainingDigits')
len(trainingFileList)
&&& trainingMat
= zeros((m,1024))
&&& for i in
fileNameStr = trainingFileList[i]
fileStr = fileNameStr.split('.')[0]
classNumStr = int(fileStr.split('_')[0])
hwLabels.append(classNumStr)
trainingMat[i,:] = img2vector('trainingDigits/%s' %
fileNameStr)
&&& return
trainingMat,hwLabels
  最后我们就可以编写函数来传入未明确数字的文件,通过与上述构造的训练数据集作比较来确定它实际表示的手写数字是什么,具体代码如下:
def classifyHandwriting(filename, trainingMat, hwLabels):
&&& inMat =
img2vector(filename)
&&& result =
classify0(inMat, trainingMat, hwLabels, 3)
  运行程序进行测试,结果如下:
  由运行结果可知,程序对手写数字有一个成功率较高的识别,至此,一个k-近邻算法识别手写数字的功能就做完了,感谢您的阅读。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。一种简单有效的手写体数字特征提取算法_论文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
一种简单有效的手写体数字特征提取算法
|0|0|文档简介
中国最大最早的专业内容网站|
总评分0.0|
&&综合统计特征提取法与结构特征提取法的优点,设计了一种新的基于圈、左右轮廓特征与行分段特征来获取数字字符特征向量的方法。该办法用较少的特征向量就能够保留数字字符拓扑结构中的关键信息,适应性很强。仿真实验中,首先根据字符容易获取的结构特征(圈)对字符进行大体分类,然后利用基于级联结构的AD AdaBoost神经网络根据余下的特征值进行逐层淘汰识别。结果表明,该办法
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢
<b class="ic ic-">
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。简单手写体数字识别系统
简单手写体数字识别系统,简单手写体数字识别系统
简单手写体数字识别系统
作者:陈海艺 (广西工学院 计算机系)
下载源代码
  为了实现对手写字体的识别,运用了人工智能的分层神经网络思想,对识别的字体通过训练学习,达到识别手写字体的功能。
关键字 VC,人工智能,神经网络,手写识别。
1.1 编写目的
  人工智能英文名表示是&Artificial Intelligence&,简称
AI,也就是用计算机模拟人的思维和知识,通过对本系统的学习开发,对计算机人工智能和神经网络有了初步的认识,萌发初学者对人工智能和网络神经学习的基本方法和思路。
  目前市面上的语音识别系统和手写识别,指纹识别系统大都建立在人工智能的神经网络技术的基础上,神经网络技术是解决识别系统难题的适当方法。
2 必备知识
2.1 vc基础
  本系统采用vc开发,所以希望读者对vc也要熟悉。
2.2神经网络
  下面我们来对神经网络技术有个大体的认识,
这里说的神经网络,实质上是指人工神经网络,是模拟生物神经元的实现,神经网络又分单层神经网络(不带输入层),和多层神经网络,实验证明,神经网络的的层数多少不影响网络对实体的识别,可能有人会问,为什么还需要多层神经网络的开发呢?答案是,适当的多层结构可以使网络的训练学习进度提高,可以更快地收敛到需要的权值上,但层数越多,或者层数不多都不足以证明能够越快地收敛到需要的权值上,这里的研究不属于我们的范畴,我们这里采用的使分层前向神经网络,结构图如下(图1)
3.1.算法思想
(1)界面方面:这里我们先来熟悉一下算法的思想,为了使程序跟用户有交流界面,我们必须提供一个给用户输入的终端,这里我们用鼠标代替手写,并绘制一个输入终端用于提取我们的输入,首先子类化一个静态控件,并给重绘重载,在里面绘制控件的背景(白色),和网格线(淡青色),通过矩阵的信息进行点的重绘,响应鼠标事件,用来绘制终端的点。
(2)神经网络:我们这里采用了10×10的网格结构,为了是算法清晰易见,所以输入采用100个输入,事实上用到的点没有那么多,用户可以根据需要更改,中间的隐层采用5个输入,因为我们只是识别数字,所以只是有10个输出就足够了,(其实不用10个输出也可以完成任务,1010就可以标识10了,可以只要四位,但是还是那句话,为了算法清晰易见),所以神经网络的结构是100:5:10.可以通过改变源代码的define来改变网络拓扑结构。
3.2 算法描述
设输入层为n个输入,隐层是m个输入,输出层是p个输出
1.初始化V,W,α,ε //给V,W赋初值,这里用随机值,有经验的话可以给V和W
//赋一个近似的初值,这样的话可以加快收敛速度。
// 是学习因子,可以根据学习的进度来动态改变,这里自始
//至终取0.7, 是精度系数,
2.循环学习直到误差小于精度e=(I,T) //对每一个样本取样放到集合e中 ,I代表输入样本,T代表输出样板
求a[j]=g(in[j])=g(//求隐层的值,其中V是各个权值的向量,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//I是样板值
o[i]=g(in[i])=g(//求输出层的值,其中W是各个隐层输入的&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//权值,a[j]是输入的隐层的值
Err[i]=T[i]-O[i] (1&=i&=p) //Err是误差值求 Δ[i]=Err[i]*g`(in[i])
//g`(in[i]
来源:/n/4949.html
热门搜索:
使用word制作电子表格初级教程
如何制作ppt动画 幻灯片制作教程图解
如何清理Win7系统垃圾
PS调色后期处理教程 简单制作明亮调色教程
您可能会发现,经常看到在短视频有人在表演的时候说一些鼓励的话,然后就是双击666,听的您或许摸不清头脑,我就在这里为您解答一下,请给我点赞,让我解答更加有动力。
您是否熟悉我们生活的城市是怎么命名而来的呢?中国城市的命名可是有很深的文化底蕴和历史背景的,你都知道么?我从网上搜集了大量的城市名来源,让您好好的涨涨知识,您准备好了吗?
对于爱美人士来说,美白护肤是不分季节的,即使在冬季,依然需要做好皮肤护理工作。饮食调理是护肤的一项重要措施,那么冬天美白吃什么水果呢?接下来就和我一起来看看了解一下冬季美白吃什么水果好!
产妇顺产以后多久可以洗头发?有很多产妇为了防止自己受寒所以在产后不让自己洗头发,但是又特别难受,这篇文章讲述了产妇顺产以后多长时间可以洗头发,通过这篇文章了解产妇顺产以后多久可以洗头发吧。
阴阳师是现在相当火热的一款手游,最近阴阳师又有了新的更新,玩家可以通过挑战副本来获取妖刀姬樱雨刀舞皮肤。可是的很多人不知道阴阳师妖刀姬副本阵容是怎样的,下面就给大家来详细介绍吧。
阴阳师是现在很火热的一款手机游戏,这款游戏一直在更新完善,受到很多人的追捧,就在最近阴阳师又推出了小鹿男,小鹿男作为SSR式神,很多人对它还不是很了解,下面就给大家来介绍阴阳师小鹿男御魂以及阵容搭配吧。
我们在玩阴阳师完成悬赏任务的时候,都会要求玩家找到各种式神的位置,可是很多人不知道阴阳师跳跳哥哥在哪里刷、哪里多,下面就给大家来详细介绍吧,希望对大家玩游戏有所帮助。
京津冀及周边地区出现持续雾霾天气,很是让孕妈妈们担心。持续的雾霾天气对孕妇产生了很大的影响,那么雾霾天气对孕妇危害有多大?雾霾天气孕妇怎么办?下面的文章详细介绍 了雾霾天气对孕妇的危害,一起来看看吧。
我们知道宝宝刚刚出生的时候口腔里是没有牙齿的,一般孩子在四个月以后慢慢开始出牙,每个孩子的体质不一样,所以出牙的时间也是有所差异的,宝宝出牙的时候身体会出现一些症状,家长们要及时的护理好,下面一起来看看宝宝长牙的症状有哪些。
肚子上的赘肉看上去让人烦恼,尤其是对于想穿裙子的女生来说更是一件郁闷的事情。现在减肥的方法有很多,但是很多人并不知道专门瘦肚子的方法。那么,如何瘦肚子呢?下面就给大家介绍几种减肚子的方法吧。

我要回帖

更多关于 手写数字识别算法 的文章

 

随机推荐