手写数字系统实践指导手册1问题描述设计一个简单的手写数字识别系统,能够识别手写输入的数字1-9并且能够识别选中的文本文件中的数字,应具有简单方便的操作界面,输入输出等。1.1功能需求分析通过分析,以及从用户的角度考虑,系统应该具有以下功能:(1)数字的手写输入。作为一个手写数字识别系统,首先应该能够让用户过绘制窗口进行数字绘制,系统得到用户的手写输入进行处理。(2)直接选择文件。用户还可以选择系统中的文本文件进行处理。(3)数据预处理。包括计算数据大小、二值化、格式化处理等。(4)数字提取。将经过二值化后的图像中的个数字区域进行提取,只有能够将数字进行准确的提取,才能将其一一识别。(5)基准库的选择与建立。选择一个可供系统训练和测试的样本库非常重要,本系统的训练集和测试集选择的是《机器学习实战》中所给的数据。(6)识别数字。经过训练集进行训练后,使用knn算法对需要识别的数字识别。2数据集获取任务要求:从网上爬取或者下载适合进行手写数字识别系统的训练集和测试集实践指导:方式一:自己从网上找适合的数据下载方式二:推荐数据集:“手写数字数据集的光学识别”一文中的数据集合,该文登载与2010年10月3日的UCI机器学习资料库中功能设计与实现3.1手写数字识别系统结构图:图一:系统结构图3.2识别用户选择手选文件功能设计与实现任务要求:用户可以自己从电脑中选择文本文件进行识别。实践指导:KNN分类器的构造思路及原理如下:1)选择训练集和测试集。系统所采用的数据集选用的是“手写数字数据集的光学识别”一文中的数据集合。0-9每个数字大约有200个训练数据20个测试数据。数字的文本格式如图所示。文本格式存储的数字的文件命名也很有特点,格式为:数字的值_该数字的样本序号,如图所示。2)格式化处理数据。将训练集中32*32的二进制图像矩阵转换为1*1024的向量。用于knn距离的计算3)将训练集中所有的文件内容存在列表中,创建一个m*1024的训练矩阵,矩阵的每行存储一个图像。4)将需要进行预测的测试集的图像矩阵转换为1*1024的向量。5)编写KNN算法对训练集进行训练,然后对测试集进行预测。如果使用python的话,可以调用sklearn.neighbors中的KNeighborsClassifier函数对测试集进行预测。5)真实值与预测值进行比较。数据中的文件按照规则命名,我们可以从文件名中解析出分类数字,如文件9_1.txt分类时9,他是数字9的第一个实例。3.3识别用户手写输入功能设计与实现任务要求:用户可以在手写识别系统的界面上用鼠标进行手写输入,然后系统自动识别出用户的输入。实践指导:识别用户手写输入的思路和原理如下:(1)简单说就是把数字划分成很多很多的小块,如图二所示:每个数字被划分成了4*5=20个小块。分好了小块以后,其实我们要知道每个小块是由很多个像点素构成的。比如数字8,是由5行4列共计:5*4=20个小块构成。(2)数一下每个小块内,有多少个黑色的点。比如第一行:第2个小块中,共有28个点,记为28.第3个小块中,共有10个点,记为10.第4个小B中,共有0个点,记为0.以此类推,可以计算出每一行的每一个小块数字是多少。(3)为了方便,我们把得到的特征,排成一排(数组)就好了。(4)照着葫芦画瓢,每个数字的特征其实都是一堆数字构成的。这个数字类似于我们的身份证号码,一般来说,是独一无二的。(5)识别原理:就是比较要识别的数字特征和步骤4中的哪个数字的特征最接近。这里为了方便,假设要识别数字“8”,然后看看怎么从一堆数字里面选出来他到底应该是几。具体方法时计算其欧式距离,距离越小代表其相似性越大。4系统评估(1)比较测试集中各个样本的分类结果和真实类别,统计下表中a,b,c,d取值。真实类别正例负例分类器判断正例AB负例CD(2)根据下列公式计算查准率、查全率、F1值、正确率查准率:查全率:F1值:正确率:如不能完全实现查准率、查全率、F1值、正确率,至少计算下准确率。5简单的系统界面设计良好的图形用户界面来展示系统功能。输入:用户选择的文本文件或者鼠标的手写输入输出:识别后的数字结果%100BAAprecision%100CAArecall%10021RPPRF%100DCBADAAccurarcy