文本为测试集和训练集两个文件夹,里面文件命名为0_0.txt(为数字0的第0个实例)。里面为32*32的数字
1.将文本转为向量
def img2vector(filename):
returnvect = zeros((1,1024))
with open(filename,"r") as f:
lines = f.readlines()
for i in range(32):
for j in range(32):
returnvect[0,32*i+j] = int(lines[i][j])
return returnvect
2.识别
def handwritingclassTest():
lables = []
trainfileList = os.listdir('trainingDigits')
trainSize = len(trainfileList)
trainMat = zeros((trainSize, 1024))
for i in range(trainSize):
lable = trainfileList[i].split('_')[0]
lables.append(lable)
trainMat[i,:] = img2vector("trainingDigits/"+trainfileList[i])
testfileList = os.listdir('testDigits')
errorCount = 0.0
testSize = len(testfileList)
for i in range(testSize):
testMat =img2vector("testDigits/"+testfileList[i])
Result = classify0(testMat,trainMat, lables, 2)
testlable = testfileList[i].split('_')[0]
print("predict:"+Result+",real:"+testlable)
if Result!=testlable:
errorCount += 1
rate = errorCount/testSize
print("errorrate:"+str(rate))
问题:运行时一直显示读文件时an integer is required (got type str),最后找到原因是在引用os模块时,引用方式为from os import *,改为import os就好了。
缺点:耗时,无法给出任何数据的基础结构信息。
本文介绍了一种将手写数字的文本图像转换为向量并进行识别的算法。通过读取训练集和测试集文件夹中的32*32大小的数字图像,将其转化为向量形式,再利用分类器进行预测。实验结果显示,该方法能够准确预测大部分手写数字,但存在一定的错误率。
1969

被折叠的 条评论
为什么被折叠?



