kNN算法及实例(二)

来源:互联网 发布:汉朝为什么灭亡 知乎 编辑:程序博客网 时间:2024/05/17 15:19

上一篇博客介绍了kNN算法,以及如何在一维数据中使用分类http://blog.csdn.net/congqi4525/article/details/71374484。
本篇博客将详细介绍如何对二维数据进行分类(以机器学习实战中的手写识别系统为例)
算法数据包括两部分:trainingDigits和testDigits
为了使用上一篇博客中的分类算法,需要将图片的二维数据转换成一维数据
算法代码如下:

from numpy import *from kNN import classify0import osdef img2vector(filename):       #将二维图像数据转换成一维向量的形式    retVec=zeros((1,1024))    fr=open(filename)    for i in range(32):        lineStr=fr.readline()        for j in range(32):            retVec[0,32*i+j]=int(lineStr[j])    return retVecdef handclassTest():    hwLabels=[]    trainFileList=os.listdir('data/trainingDigits')    m=len(trainFileList)    trainingMat=zeros((m,1024))    for i in range(m):              #将训练数据读入矩阵中        fileNameStr=trainFileList[i]        fileStr=fileNameStr.split('.')[0]        classNumStr=int(fileStr.split('_')[0])        hwLabels.append(classNumStr)        trainingMat[i,:]=img2vector("data/trainingDigits/%s"%fileNameStr)    testFileList=os.listdir('data/testDigits')    mTest=len(testFileList)    errorCount=0.0    for i in range(mTest):      #对测试集中的数据循环使用分类,最终得到类别        fileNameStr=testFileList[i]        fileStr=fileNameStr.split('.')[0]        classNumStr=int(fileStr.split('_')[0])        vectorUnderTest=img2vector("data/testDigits/%s"%fileNameStr)        classresult=classify0(vectorUnderTest,trainingMat,hwLabels,3)        print("came back:%d  real:%d"%(classresult,classNumStr))        if(classresult!=classNumStr):            errorCount+=1.0    print("errorCount:%d  %f"%(errorCount,errorCount/float(mTest)))handclassTest()
1 0
原创粉丝点击