前面探索了KNN的代码,KNN中唯一需要优化的参数就是K,前面还没涉及到训练K值使得获得的准确率最高,思想还是比较简单的,书上还附加了关于利用KNN进行手写数字识别的算法,主要思想是先将32*32的图片文件(图片本身用01序列构成的矩阵表示,TXT文档)转化为1*1024的向量,再使用K近邻的思想,利用前面已经写好的部分代码(classify0())进行计算,下面是具体的代码。
def img2vector(filename): #img2vecor将32*32的图片转化为向量
returnVect = zeros((1,1024)) #返回一个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]) #这个向量本身也完全是由01构成,相当于将原来的矩阵每一行首尾相连
return returnVect
def handwritingClassTest():
hwLabels = []
trainingFileList = listdir('trainingDigits') #load the training set,‘trainingDigits’是一个文件夹,包含若干个txt文件
m = len(trainingFileList) #得到“