用k-近邻算法:手写识别系统
2018-01-05 10:40
134 查看
用k-近邻算法:手写识别系统
一、准备数据:将图像转换为测试向量我们将图像格式化处理为一个向量:把一个32x32的二进制图像矩阵转换为1x1024的向量。还是在kNN.py文件中,编写将图像转换为向量的函数如下:#将图像转换为测试向量 def img2vector(filename): returnVect = zeros((1, 1024))#创建一个1x1024的numpy数组 fr = open(filename)#打开指定问价 for i in range(32):#循环读出文件的前32行 lineStr = fr.readline()#读取第i行,就一行 for j in range(32):#将每行的前32个字符值存储在numpy数组中 returnVect[0, 32*i+j]=int(lineStr[j]) return returnVect在命令行中输入:
>>> import kNN >>> testVector = kNN.img2vector('/Users/lb1/Desktop/小学伴-机器学习/机器学习实战源代码/machinelearninginaction/Ch02/digits/testDigits/0_2.txt') >>> testVector[0, 0:31 >>> testVector[0, 32:63]二、测试算法:使用k-近邻算法识别手写算法
还是在kNN.py文件中,测试分类器代码如下:
# 手写数字识别系统的测试代码 def handwritingClassTest(): hwLabels = [] # 存储训练数据集的标签 # 获取训练数据文件中的内容 trainingFileList = listdir( '/Users/lb1/Desktop/小学伴-机器学习/机器学习实战源代码/machinelearninginaction/Ch02/digits/trainingDigits') # 用listdir()返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序,将这些名字存放在一个列表中 m = len(trainingFileList) # 训练集中包含的图片总数 trainingMat = zeros((m, 1024)) # 构造训练矩阵,该矩阵的每行数据存储一个图像 # 从文件名中解析出分类数字 for i in range(m): # 遍历每个样本文件 fileNameStr = trainingFileList[i] # 第i个文件的名字 fileStr = fileNameStr.split('.')[0] # 以.为分割将名字分割为字符串数组 classNumStr = int(fileStr.split('_')[0]) # 实现了从文件名中解析分类数字 hwLabels.append(classNumStr) trainingMat[i, :] = img2vector( '/Users/lb1/Desktop/小学伴-机器学习/机器学习实战源代码/machinelearninginaction/Ch02/digits/trainingDigits/%s' % fileNameStr) testFileList = listdir('/Users/lb1/Desktop/小学伴-机器学习/机器学习实战源代码/machinelearninginaction/Ch02/digits/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( '/Users/lb1/Desktop/小学伴-机器学习/机器学习实战源代码/machinelearninginaction/Ch02/digits/testDigits/$s' % fileNameStr) classifierResult = classify(vectorUnderTest, trainingMat, hwLabels, 3) print("the classifier came back with: %d, the real anser 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))补充:os.listdir(): 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。
相关文章推荐
- CSDN机器学习笔记十二 k-近邻算法实现手写识别系统
- 第三篇:基于K-近邻分类算法的手写识别系统
- 机器学习笔记(5)---K-近邻算法(3)---KNN手写识别系统
- 机器学习实战笔记2(k-近邻算法)
- 机器学习实战--最简单算法--KNN算法(k-近邻算法)
- k-近邻算法-机器学习实战例子说明
- 机器学习 & python k-近邻算法处理手写识别系统
- 《机器学习实战》读书笔记之k-近邻算法
- k-近邻算法(预)
- 机器学习笔记(二)——k-近邻算法
- k-近邻算法改进约会网站配对效果
- 【模式识别】K-近邻分类算法KNN
- kNN k 近邻 分类算法 简介
- (留存记录)近邻分类算法KNN
- 机器学习——K-近邻(KNN)算法
- 机器学习实战——k-近邻算法
- K-近邻算法的Python实现 : 源代码分析
- 《机器学习实战》学习笔记(1)——k-近邻算法
- K-近邻算法改进约会网站的配对效果
- 机器学习实战--笔记2(k-近邻算法)