第二章 K-近邻算法 及 手写识别系统
来源:互联网 发布:淘宝ipad为什么便宜 编辑:程序博客网 时间:2024/05/18 02:34
这一节主要是手写识别数字系统的搭建。实际训练数据在 trainingDigits 里面,大约2000个例子。
为了使用之前 2.2 的分类器,要把图像格式化处理为一个向量,32*32 变成 1* 1024。
首先写一个 img2vector 函数,打开给定文件,循环读出前32行,然后把每行的头32个字符存在 NumPy 数组里面,最后返回数组。
这个片段加在之前 kNN.py 里面。
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] # 0 指的是取第一个值,这里是获取文件名 classNumStr = int(fileStr.split('_')[0]) # 获取文件真实数字,比如 6_10.txt,这里得到的是6 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 error is: %d" % errorCount print "\nthe total error rate is: %f" % (errorCount/float(mTest))
新建一个 usekNN.py 文件如下:
import kNN#just test reading.testVector = kNN.img2vector('testDigits/0_13.txt')print testVector[0,0:31]print '*****************************'print testVector[0,32:63]print '*****************************'kNN.handwritingClassTest()
最后运行即可,错误率为 1.1628%
======================================================================================
实际上运行效率不高的,下一节要讲述的就是 k决策树 算法。
另外Python 可以计时,用 time() 函数实现,第一次调用开始计时,第二次调用停止计时:
# -*- coding:utf-8 -*-import kNNimport time#just test reading.testVector = kNN.img2vector('testDigits/0_13.txt')print testVector[0,0:31]print '*****************************'print testVector[0,32:63]print '*****************************'t0 = time.clock() # 第一次计时kNN.handwritingClassTest()t1 = time.clock()print "Cost you %f second." % (t1 - t0) # 结束计时
0 0
- 第二章 K-近邻算法 及 手写识别系统
- 手写识别系统(k-近邻算法)
- k-近邻算法 手写识别系统
- 机器学习 & python k-近邻算法处理手写识别系统
- k-近邻算法实现手写数字识别系统
- 机器学习 & python k-近邻算法处理手写识别系统
- k-近邻算法实现手写数字识别系统
- K近邻法及手写数字识别系统(二)
- 《机器学习实战》第二章:k-近邻算法(3)手写数字识别
- k-近邻法用于手写识别系统
- 机器学习实战—k近邻算法(kNN)03-手写识别系统
- CSDN机器学习笔记十二 k-近邻算法实现手写识别系统
- 机器学习实战笔记-K近邻算法3(手写识别系统)
- k近邻 - 手写数字识别
- OpenCV手写数字字符识别(基于k近邻算法)
- 【机器学习】k-近邻算法应用之手写数字识别
- 基于K-近邻算法识别手写数字的实现
- k近邻算法识别手写数字Python实现
- 图像的高斯平滑C++实现
- java:读取图像RGB信息
- ES2015字符串的扩展
- MySQL中的各种引擎
- Eclipse An internal error occurred during: "Initializing Java Tooling"
- 第二章 K-近邻算法 及 手写识别系统
- DFS与回溯法
- 2016年12月10日一周工作总结
- 1017. A除以B
- 前后端接口规范-------通用响应格式3
- docker免去sudo命令
- 眼前一亮的WI微逸输入法
- SpringMVC RequestMapping注解类·Ant和占位符URL
- 【Android 初学者】简单理解:多线程