k近邻算法--手写识别系统

下面的例子来源为《机器学习实战》,例子只能识别0-9。

首先需要将图像二进制数据转化为测试向量:

def imgTransformVector(filename):  # 将 32x32 二进制图像矩阵转化为 1x1024 向量
    returnVector = np.zeros((1,1024))
    fr = open(filename)
    for i in range(32):
        lineStr = fr.readline()
        for j in range(32):
            returnVector[0,32*i+j] = int(lineStr[j])
    return returnVector

接着是算法的实现代码:

def handWritingTextTest():
    handWritingLabels = []
    # listdir 返回指定的文件夹包含的文件或文件夹的名字的列表
    trainingFileList = os.listdir(‘/Users/Desktop/trainingDigits‘)
    trainingDataLen = len(trainingFileList)                # 获取训练数据集的大小
    trainingMatrix = np.zeros((trainingDataLen,1024))
    for i in range(trainingDataLen -1):
        fileNameString = trainingFileList[i + 1]          # 第i个训练样本的文件名
        fileString = fileNameString.split(‘.‘)[0]    # 截去.txt部分
        classNumberString = int(fileString.split(‘_‘)[0])   #获得分类数字
        handWritingLabels.append(classNumberString)
        trainingMatrix[i,:] = imgTransformVector(‘/Users/Desktop/trainingDigits/%s‘%fileNameString)
    testFileList = os.listdir(‘/Users/Desktop/testDigits‘)
    errorCount = 0.0
    testDataLen = len(testFileList)
    for i in range(testDataLen - 1):
        fileNameString = testFileList[i +1]
        fileString = fileNameString.split(‘.‘)[0]
        classNumberString = int(fileString.split(‘_‘)[0])
        testDataVector = imgTransformVector(‘/Users/Desktop/testDigits/%s‘%fileNameString)
        classifierResult = classifyPerson(testDataVector,trainingMatrix,handWritingLabels,3)

        if (classifierResult != classNumberString):
            errorCount += 1
            print(‘the classifier:%d, the real answer:%d‘ % (classifierResult, classNumberString))
    print(‘\nthe total errorCount:%d‘%errorCount)
    print(‘\nthe total errorRate:%.d‘%(errorCount/float(testDataLen)))
时间: 2024-08-28 12:04:33

k近邻算法--手写识别系统的相关文章

使用K近邻算法实现手写体识别系统

目录 1. 应用介绍 1.1实验环境介绍 1.2应用背景介绍 2. 数据来源及预处理 2.1数据来源及格式 2.2数据预处理 3. 算法设计与实现 3.1手写体识别系统算法实现过程 3.2 K近邻算法实现 3.3手写体识别系统实现 3.4算法改进与优化 4. 系统运行过程与结果展示 1.应用介绍 1.1实验环境介绍 本次实验主要使用Python语言开发完成,Python的版本为2.7,并且使用numpy函数库做一些数值计算和处理. 1.2应用背景介绍 本次实验实现的是简易的手写体识别系统,即根据

Python 基于KNN算法的手写识别系统

本文主要利用k-近邻分类器实现手写识别系统,训练数据集大约2000个样本,每个数字大约有200个样本,每个样本保存在一个txt文件中,手写体图像本身是32X32的二值图像,如下图所示: 手写数字识别系统的测试代码: from numpy import * import operator from os import listdir #inX    要检测的数据 #dataSet   数据集 #labels    结果集 #k      要对比的长度 def classify0(inX, data

基于K-近邻分类算法的手写识别系统

前言 本文将继续讲解K-近邻算法的项目实例 - 手写识别系统. 该系统在获取用户的手写输入后,判断用户写的是什么. 为了突出核心,简化细节,本示例系统中的输入为32x32矩阵,分类结果也均为数字.但对于汉字或者别的分类情形原理都是一样的. 有了前面学习的基础,下面直接进入项目开发步骤. 第一步:收集并准备数据 在用户主目录的trainingDigits子目录中,存放的是2000个样本数据. 每个样本一个文件,其中一部分如下所示: 文件命名格式为: 分类标签_标签内序号 如 0_20.txt 就表

机器学习实战笔记——基于KNN算法的手写识别系统

本文主要利用k-近邻分类器实现手写识别系统,训练数据集大约2000个样本,每个数字大约有200个样本,每个样本保存在一个txt文件中,手写体图像本身是32X32的二值图像,如下图所示: 首先,我们需要将图像格式化处理为一个向量,把一个32X32的二进制图像矩阵通过img2vector()函数转换为1X1024的向量: def img2vector(filename): returnVect = zeros((1,1024)) fr = open(filename) for i in range(

K-近邻算法构造手写识别系统

为了简单起见,这里构造的系统只能识别数字0到9,需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小:宽高是32像素的黑白图像.尽管采用文本格式存储图像不能有效地利用内存空间,但是为了方便理解,我们还是将图像转换为文本格式. ---1.收集数据:提供文本文件 该数据集合修改自“手写数字数据集的光学识别”-一文中的数据集合,该文登载于2010年10月3日的UCI机器学习资料库中http://archive.ics.uci.edu/ml.        ---2.准备数据:将图像转换为测试

机器学习实战笔记-K近邻算法3(手写识别系统)

1 准备数据:将图像转换为测试向量 这次数据集还是有两种,训练数据集和测试数据集,分别有2000个,900个. 我们将把一个32*32的二进制图像矩阵转换为1 x 1024的向量,这样前两节使用的分类器就可以处理数字图像信息了. 代码: def img2vector(filename): returnVect = zeros((1,1024)) file = open(filename) for i in range(32): line = file.readline() for j in ra

《机器学习实战》之k-近邻算法(手写识别系统)

这个玩意和改进约会网站的那个差不多,它是提前把所有数字转换成了32*32像素大小的黑白图,然后转换成字符图(用0,1表示),将所有1024个像素点用一维矩阵保存下来,这样就可以通过knn计算欧几里得距离来得到最接近的答案. 1 import os 2 import operator 3 from numpy import * 4 5 def classify0(inX, dataSet, labels, k): 6 dataSetSize = dataSet.shape[0] 7 diffMat

《机器学习实战》菜鸟学习笔记(三)kNN手写识别系统

目的:利用kNN识别数字0-9 材料:32*32的数字方阵(保存形式是文本文件) #-*-coding:utf-8-*- from numpy import * def img2vector(filename): #生成一个1*1024的array(zeros是numpy的函数,至于array与list区别这里就不多介绍了) returnVect = zeros((1,1024)) #使用open函数打开一个文本文件 fr = open(filename) #循环读取文件内容 for i in

《机器学习实战》-k近邻算法

目录 K-近邻算法 k-近邻算法概述 解析和导入数据 使用 Python 导入数据 实施 kNN 分类算法 测试分类器 使用 k-近邻算法改进约会网站的配对效果 收集数据 准备数据:使用 Python 解析文本文件 分析数据:使用 Matplotlib 画二维散点图 准备数据:归一化数值 测试算法:验证分类器 使用算法:构建完整可用系统 手写识别系统 准备数据 测试算法 使用算法:构建完整可用系统 总结 K-近邻算法 k-近邻分类算法概述 使用 k-近邻算法改进约会网站的配对效果 手写识别系统