手写识别系统
步骤
- 收集数据:提供文本文件。
- 准备数据:编写函数classify0() ,将图像格式转换为分类器使用的list格式。
- 分析数据:在Python命令提示符中检查数据,确保它符合要求。
- 训练算法:此步骤不适用于k近邻算法。
- 测试算法:编写函数使用提供的部分数据集作为测试样本,测试样本与非测试样本的区别在于测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。
- 使用算法
准备数据:将图像转换为测试向量
def img2vector(filename):
returnVect = zeros((1, 1024))
fr = 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
测试数据
def handwritingClassTest():
hwLabels = []
trainingFileList = listdir('trainingDigits')
m = len(trainingFileList)
trainingMat = zeros((m, 1024))
for i in range(m):
filenameStr = trainingFileList[i]
fileStr = filenameStr.split('.')[0]
classNumStr = int(fileStr.split("_")[0])
hwLabels.append(classNumStr)
trainingMat[i, :] = img2vector('trainingDigits/%s' % filenameStr)
testFileList = listdir('testDigits')
errorCount = 0.0
mTest = len(testFileList)
for i in range(mTest):
filenameStr = testFileList[i]
fileStr = filenameStr.split('.')[0]
classNumStr = int(fileStr.split("_")[0])
vectorUnderTest = img2vector('testDigits/%s' % filenameStr)
classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)
print("the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr))
if(classifierResult!=classNumStr):errorCount +=1.0
print("\nthe total number of errors is: %d" % errorCount)
print("\nthe total error rate is: %f" % (errorCount / float(mTest)))
Python函数记录
- zeros
这个函数之前已经记录过了,现在再复习一下。
#[[0. 0. 0. 0.]] 1行4列
returnVect=zeros((1,4))
# 2行3列
#[[0. 0. 0.]
# [0. 0. 0.]]
returnVect=zeros((2,3))
print(returnVect)