【机器学习】手写数字识别算法

1.数据准备

样本数据获取忽略,实际上就是将32*32的图片上数字格式化成一个向量,如下:

 

本demo所有样本数据都是基于这种格式的

训练数据:将图片数据转成1*1024的数组,作为一个训练数据。

训练数据集:https://github.com/zimuqi/machine_Learning/tree/master/ch02/trainingDigits

测试数据集:https://github.com/zimuqi/machine_Learning/tree/master/ch02/testDigits

样本的文件名格式为:真实值_xxx.txt

转换代码:

1 def img2vector(filename):
2     returnVect=zeros((1,1024))
3     fr=open(filename)
4     for i in range(32):
5         lineStr=fr.readline()
6         for j in range(32):
7             returnVect[0,32*i+j]=int(lineStr[j])
8     return returnVect

 

2.测试算法

 1 def handwritingClassTest():
 2     hwLabels=[]    # 训练样本的标签数组
 3     traningFileList=listdir("trainingDigits")    # 获取所有的训练样本目录下的文件名
 4     m=len(traningFileList)
 5     traningMat=zeros((m,1024))    # 初始化训练样本数列
 6 
 7     for i in range(m):
 8         fileNameStr=traningFileList[i]    # 获取文件名
 9         fileStr=fileNameStr.split(".")[0]   
10         clasNumStr=int(fileStr.split("_")[0])    # 获取样本的实际值 放入标签数组
11         hwLabels.append(clasNumStr)
12         traningMat[i,:]=img2vector("trainingDigits/{}".format(fileNameStr))    # 将样本转化成1*1024的行放入训练样本数列
13 
14     testFileList=listdir("testDigits")    # 测试样本目录
15     error=0
16     mtest=len(testFileList)
17     for i in range(mtest):
18         fileNameStr=testFileList[i]
19         fileStr=fileNameStr.split(".")[0]
20         clasNumStr=int(fileStr.split("_")[0])
21         testMat=img2vector("testDigits/{}".format(fileNameStr))
22         res=classify(testMat,traningMat,hwLabels,3)     # 使用分类器分类
23         print "came bank with:{} the real anwser is:{}".format(clasNumStr,res)
24         if clasNumStr!=res:    # 对比与真实的结果 计算错误率
25             error+=1
26 
27     print "total:{}".format(mtest)
28     print "error:{}".format(error)
29     print "error:{}".format(float(error/mtest))

这个案例中 算法的识别率为:98.84%

classify是分类器 上上一篇文章中有写到,具体了解可以点击这里

 

转载于:https://www.cnblogs.com/zimuzimu/p/7259935.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值