《机器学习实战》手写识别系统

#(1)收集数据:提供文本文件
#(2)准备数据:编写函数img2vector(),将图片格式转换为分类器使用的向量格式
import numpy as np
def img2vector(filename):
    returnVect = np.zeros((1,1024))
    fr = open(filename)
    for i in range(32): #32行
        lineStr = fr.readline()
        for j in range(32): #32列
            returnVect[0,32*i+j] = int(lineStr[j])
    return returnVect
print(img2vector("E:/代码/机器学习实战/第二章:K-近邻算法/手写识别系统/digits/trainingDigits/0_0.txt"))
#(3)分析数据:在python命令提示符中检查数据,确保它符合要求
#(4)训练数据:此步骤不适用于K-近邻算法
#(5)测试算法:编写函数使用提供的部分算法数据集作为测试样本,测试样本与非测试样本的区别在于
# 测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。
from os import listdir #从os模块中导入函数listdir(),它可以列出给定目录的文件名
import KNN
def handwritingClassTest():
    hwLabels = []
    trainingFileList = listdir('E:/代码/机器学习实战/第二章:K-近邻算法/手写识别系统/digits/trainingDigits')
    m = len(trainingFileList)
    trainingMat = np.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:/代码/机器学习实战/第二章:K-近邻算法/手写识别系统/digits/trainingDigits/%s'% fileNameStr)
    testFileList = listdir("E:/代码/机器学习实战/第二章:K-近邻算法/手写识别系统/digits/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('E:/代码/机器学习实战/第二章:K-近邻算法/手写识别系统/digits/testDigits/%s'% fileNameStr)
        classiferResult = KNN.classify0(vectorUnderTest,trainingMat,hwLabels,3)
        print("the classifier came back with: %d,the real answer is: %d" %(classiferResult,classNumStr))
        if classiferResult != classNumStr:
            errorCount += 1.0
    print("\nthe total number od errors is: %d" %errorCount)
    print("\nthe total error rate is: %f"%(errorCount/float(mTest)))
handwritingClassTest()
# print(handwritingClassTest())
#(6)使用算法

猜你喜欢

转载自blog.csdn.net/niuxiaolei/article/details/80487946