《机器学习实战》之k-近邻算法(手写识别系统)
2018-02-13 23:19
471 查看
这个玩意和改进约会网站的那个差不多,它是提前把所有数字转换成了32*32像素大小的黑白图,然后转换成字符图(用0,1表示),将所有1024个像素点用一维矩阵保存下来,这样就可以通过knn计算欧几里得距离来得到最接近的答案。
import os import operator from numpy import * def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0] diffMat = tile(inX, (dataSetSize,1)) - dataSet #统一矩阵,实现加减 sqDiffMat = diffMat**2 sqDistances = sqDiffMat.sum(axis=1) #进行累加,axis=0是按列,axis=1是按行 distances = sqDistances**0.5 #开根号 sortedDistIndicies = distances.argsort() #按升序进行排序,返回原下标 classCount = {} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 #get是字典中的方法,前面是要获得的值,后面是若该值不存在时的默认值 sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0] def img2vector(filename): f = open(filename) returnVect = zeros((1,1024)) for i in range(32): line = f.readline() for j in range(32): returnVect[0,i*32+j] = int(line[j]) return returnVect def handwritingClassTest(): fileList = os.listdir('trainingDigits') m = len(fileList) traingMat = zeros((m, 1024)) hwlabels = [] for i in range(m): fileName = fileList[i] prefix = fileName.split('.')[0] number = int(prefix.split('_')[0]) hwlabels.append(number) traingMat[i,:] = img2vector('trainingDigits/%s' %fileName) testFileList = os.listdir('testDigits') m = len(testFileList) errorNum = 0.0 for i in range(m): testFileName = testFileList[i] prefix = testFileList[i].split('.')[0] realNumber = int(prefix.split('_')[0]) testMat = img2vector('testDigits/%s' %testFileName) testResult = classify0(testMat, traingMat, hwlabels, 3) if testResult != realNumber: errorNum += 1 print('The classifier came back with: %d, the real answer is: %d' %(testResult, realNumber)) print('错误率为%f' %(errorNum/float(m))) if __name__ == '__main__': handwritingClassTest()
相关文章推荐
- 【10月23日】机器学习实战(一)KNN算法:手写识别系统
- 机器学习实战之k-近邻算法(6)---手写数字识别系统(0-9识别)
- k-近邻算法实现手写数字识别系统
- k-近邻算法2(kNN)手写识别系统
- 《机器学习实战》第二章:k-近邻算法(3)手写数字识别
- 『机器学习实战』使用 k-近邻算法识别手写数字
- k-近邻算法实现手写数字识别系统
- 【Machine Learning in Action --2】K-近邻算法构造手写识别系统
- k-近邻算法 手写识别系统
- 机器学习整理笔记——使用k-近邻算法对手写识别系统的测试
- 手写识别系统(k-近邻算法)
- 第二章 K-近邻算法 及 手写识别系统
- 基于K-近邻算法的手写数字识别研究
- 学习笔记——《机器学习实战》KNN算法实现 约会网站测试,手写数字识别,代码,注释,错误修改
- 《机器学习实战》-kNN算法手写算法识别
- 【《机器学习实战》第2章读书笔记】手写数字识别系统剖析
- 使用Knn算法实现手写数字识别系统(附带jpg转txt代码)
- 机器学习实战(①)——KNN算法改进约会网站的配对效果和手写字识别系统
- [机器学习]支持向量机及其应用---手写识别系统(SMO算法)
- 基于K-近邻算法识别手写数字的实现