码迷,mamicode.com
首页 > 编程语言 > 详细

【机器学习】k-近邻算法应用之手写数字识别

时间:2015-01-30 15:40:17      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

上篇文章简要介绍了k-近邻算法的算法原理以及一个简单的例子,今天再向大家介绍一个简单的应用,因为使用的原理大体差不多,就没有没有过多的解释。

为了具有说明性,把手写数字的图像转换为txt文件,如下图所示(三个图分别为5、6、8):

技术分享技术分享技术分享

要使用k-近邻算法,需要有足够的样本数据和测试数据,我放到了两个文件夹里(trainingDigits和testDigits),可以在这里(http://pan.baidu.com/s/1i3osO7N)下载使用

这里,每个数字有32X32个0或1,可以认为是一个维度为1024的点,也就是对这种点运用kNN算法,这里只附上手写数字的测试函数代码,代码和总需要的其他函数都在上一篇文章中,另外,需要注意的是因为要获取文件类列表,需要在文件中的头部再加上from os import listdir

 1 def handwritingClassTest():
 2     hwLabels = []
 3     trainingFileList = listdir(trainingDigits)
 4     m = len(trainingFileList)
 5     trainingMat = zeros((m, 1024))
 6     for i in range(m):
 7         fileNameStr = trainingFileList[i]
 8         fileStr = fileNameStr.split(.)[0]
 9         classNumStr = int(fileStr.split(_)[0])
10         hwLabels.append(classNumStr)
11         trainingMat[i, :] = img2vector(trainingDigits/%s % fileNameStr )
12     testFileList = listdir(testDigits)
13     errorCount = 0.0
14     mTest = len(testFileList)
15     for i in range(mTest):
16         fileNameStr = testFileList[i]
17         fileStr = fileNameStr.split(.)[0]
18         classNumStr = int(fileStr.split(_)[0])
19         vectorUnderTest = img2vector(testDigits/%s % fileNameStr)
20         classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)
21         print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr)
22         if(classifierResult != classNumStr): errorCount += 1.0
23     print "\nthe total number of errors is: %d" % errorCount
24     print "\nthe total error rate is: %f" % (errorCount / float(mTest))

测试结果如下图:

技术分享技术分享

【机器学习】k-近邻算法应用之手写数字识别

标签:

原文地址:http://www.cnblogs.com/jtianwen2014/p/4262113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!