【机器学习】k近邻算法-03
心得体会:
需要思考如何将现实对象转化为特征向量,设置特征向量时记住鸭子定律1
鸭子定律1 如果走路像鸭子、说话像鸭子、长得像鸭子、啄食也像鸭子,那它肯定就是一只鸭子
事物的外在特征就是事物本质的表现
# 2-3手写识别系统 #32*32转1*1024数组 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 # testVector=img2vector("E:/Python/《机器学习实战》代码/Ch02/trainingDigits/0_0.txt") # print(testVector[0,0:31]) #从os模块读取测试代码 import os def handwritingClassTest(): hwLabels=[]#数据结果 trainingFileList=os.listdir("E:/Python/《机器学习实战》代码/Ch02/trainingDigits") m=len(trainingFileList) trainingMat=zeros((m,1024))#数据集 for i in range(m): fileNameStr=trainingFileList[i] fileStr=fileNameStr.split('.')[0] classNumStr=int(fileStr.split('_')[0]) hwLabels.append(classNumStr) trainingMat[i,:]=img2vector("E:/Python/《机器学习实战》代码/Ch02/trainingDigits/%s"%fileNameStr) errorCount=0.0 testFileList=os.listdir("E:/Python/《机器学习实战》代码/Ch02/testDigits") mTest=len(testFileList) for i in range(mTest): fileNameStr = testFileList[i] fileStr = fileNameStr.split('.')[0] classNumStr = int(fileStr.split('_')[0]) vectorUnderTest = img2vector("E:/Python/《机器学习实战》代码/Ch02/testDigits/%s" % fileNameStr) classifierResult=classify0(vectorUnderTest,trainingMat,hwLabels,3) if(classifierResult!=classNumStr): errorCount+=1 print("error rate:%s"%(errorCount/float(mTest))) handwritingClassTest()