首页 > 代码库 > 【机器学习】k-近邻算法应用之手写数字识别
【机器学习】k-近邻算法应用之手写数字识别
上篇文章简要介绍了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.014 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.023 print "\nthe total number of errors is: %d" % errorCount24 print "\nthe total error rate is: %f" % (errorCount / float(mTest))
测试结果如下图:
【机器学习】k-近邻算法应用之手写数字识别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。