【Python机器学习】k-近邻算法简单实践——识别手写数字
创始人
2024-11-23 11:03:46
0

为了简化理解,需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小32*32的黑白图像,并转换成文本格式

准备数据:将图像转换为测试向量

实际图像存储在trainingDigits的2000个例子和testDigits中的900个测试数据

我们使用trainingDigits目录中的数据训练分类器,使用testDigits目录中的数据测试分类器的效果。

为了使用分类器,我们必须将图像格式化处理为一个向量。我们将32*32的二进制图像矩阵转换为1*1024的向量。首先,要创建一个函数,将图像转换为向量:该函数创建一个1*1024的NumPy数组,然后打开给定的文件,循环读出文件的前32行,并将每行的头32个字符值存储在NumPy数组中,最后返回数组:

def img2vector(filename):     returnVect=zeros((1,1024))     fr=open(filename)     for i in range(32):         lineStr=fr.readlines()         for j in range(32):             returnVect[0,32*i+j]=int(lineStr[j])     return returnVect

测试算法:使用k-近邻算法识别手写数字

将数据输入到分类器,检测分类器的执行效果:

def handwritingClassTest():     hwLabels=[]     trainingFileList=listdir('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('trainingDigits/%s'%fileNameStr)     testFileList=listdir('testDigits')     errorCount=0.0     mTest=len(testFileList)     for i in range(mTest):         fileNameStr=testFileList[i]         fileStr=fileNameStr.split('.')[0]         classNumStr=int(fileStr.split('_')[0])         vectorUnderTest=img2vector('testDigits/%s'%fileNameStr)         classifierResult=classify0(vectorUnderTest,trainingMat,hwLabels,3)         print('识别为:%d,实际为:%d'%(classifierResult,classNumStr))         if(classifierResult!=classNumStr):errorCount=errorCount+1     print('错误数:',errorCount)     print('错误率:',errorCount/float(mTest))

在上述代码中,将trainingDigits目录中的文件存储在列表中,然后可以得到目录中有多少文件,并将其存储在变量m中。接着,代码创建一个m行1024列的训练矩阵,该矩阵的每行数据存储一个图像。

我们可以从文件名中解析出分类数字。该目录下的文件按照规则命名,然后我们可以将类代码存储在hwLabels向量中,使用前面的img2vector函数载入图像。

下一步中,我们对testDigits目录中的文件执行类似的操作,使用classify0()函数测试目录下的每个文件。

可以看到,错误率只有1%左右。通过改变变量k的值,修改函数的训练、测试样本的数目,都会对错误率产生影响。

实际使用这个算法时,算法的执行效率并不高,因为算法需要为每个测试向量做2000次距离计算,每个距离计算包括了1024个维度浮点运算,总共要执行900次。

相关内容

热门资讯

透视游戏!pokermaste... 透视游戏!pokermaster脚本,南丰数刀脚本,确实真的有挂(详情必备教程)-哔哩哔哩1、玩家可...
科技新动态!禅游游戏辅助(辅助... 科技新动态!禅游游戏辅助(辅助挂)开挂透视辅助攻略(总是有挂)-哔哩哔哩1、用户打开应用后不用登录就...
反观!广东雀神智能插件安装免费... 反观!广东雀神智能插件安装免费,微信小程序微乐房间怎么开挂,大神讲解(切实真的有挂)-哔哩哔哩1、微...
值得注意的是!wpk透视工作室... 值得注意的是!wpk透视工作室,创思维激k透视源码,都是是真的挂(揭露线上教程)-哔哩哔哩1、创思维...
玩家爆料!宝宝浙江游戏辅助是真... 玩家爆料!宝宝浙江游戏辅助是真的假的(辅助挂)开挂透视辅助app(果然是有挂)-哔哩哔哩1、很好的工...
透视透视!约局吧开挂神器是真的... 透视透视!约局吧开挂神器是真的吗,微信小程序开心泉州辅助器,其实真的有挂(必备透视教程)-哔哩哔哩1...
针对!微信边锋小程序辅助器免费... 针对!微信边锋小程序辅助器免费,欢乐达人暗堡破解,2025新版(切实是有挂)-哔哩哔哩1、玩家可以在...
科技介绍!兴动海满辅助(辅助挂... 科技介绍!兴动海满辅助(辅助挂)开挂透视辅助app(总是存在有挂)-哔哩哔哩1、很好的工具软件,可以...
目前!wepoker怎么提高运... 目前!wepoker怎么提高运气,微乐小程序破解,其实存在有挂(关于微扑克教程)-哔哩哔哩1、下载好...
有玩家发现!雀友会手机透视辅助... 有玩家发现!雀友会手机透视辅助器app,广西友乐免费辅助,必胜教程(总是真的有挂)-哔哩哔哩1、雀友...