【机器学习】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()

 

posted @ 2020-07-08 17:36  海底淤泥  阅读(195)  评论(0编辑  收藏  举报