编译:python3.6

代码和训练集下载:https://pan.baidu.com/s/1m7HdAkuwGgXX8v5-DN118Q

import operator
from numpy import *
from scipy import *
from matplotlib import *"""KNN近邻分类思路:1,用shape[0]得到行数2,把带划分数据用tile扩展成一个矩阵3,(用该矩阵-训练数据)平方后开方得到一个列表4,对列表按距离升序排列5,选取前K个中标签出现次数后按降序排列,[0][0]即为出现最多的标签作为带预测的划分标签"""
#inx为自己输入要分类的测试数,dataset为训练集,labels为标签集,k为kNN中的K值
#shape[0]得到训练样本多少行
#tile建立inx,dataSetSize行,1列
#sum(axis=1),按行相加
#argsort递增排序
def classify0(inX,dataSet,labels,k):dataSetSize=dataSet.shape[0]diffMat=tile(inX,(dataSetSize,1))-dataSetsqDiffMat=diffMat**2sqDistances=sqDiffMat.sum(axis=1)    #distances=sqDistances**0.5sortedDistIndicies=distances.argsort() #生成的不是距离而是标号列表 #print(sortedDistIndicies)classCount={}for i in range(k):#print(sortedDistIndicies[i])              voteIlabel=labels[sortedDistIndicies[i]]    classCount[voteIlabel]=classCount.get(voteIlabel,0)+1   #这一步是做相同标签的统计(+1),找到键voteIlabel对应的值,如果不存在这样的键则返回默认值0#print(classCount.get(voteIlabel,0))sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #sorted排序做升序,返回副本,原始输入不变,里面的参数设置请参考https://www.cnblogs.com/timtike/p/6562402.html,https://blog.csdn.net/hshl1214/article/details/40587985#print(sortedClassCount[0][0])                                                       #或者参考https://www.cnblogs.com/zhoufankui/p/6274172.htmlreturn sortedClassCount[0][0]"""将图像转换为测试向量:1、建立1*1024的0矩阵2、用历遍的方法生成矩阵"""
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"""测试算法思路:1、创建训练特征矩阵2、存储训练特征矩阵和标签3、创建错误累加4、用历遍的方式累加"""
from os import listdir
def handwritingClassTest():hwLabels=[]trainingFileList=listdir('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('trainingDigits/%s'%fileNameStr)  #/代表子文件夹testFileList=listdir('testDigits')errorCount=0.0mTest=len(testFileList)for i in range(mTest):fileNameStr=testFileList[i]fileStr=fileNameStr.split('.')[0]         #提取文件名classNumStr=int(fileStr.split('_')[0])               #提取文件名前面的数字vectorUnderTest=img2vector('testDigits/%s'%fileNameStr)  #/代表子文件夹classifierResult=classify0(vectorUnderTest,trainingMat,hwLabels,3)print("the classifier come back with %d,the real result is %d"%(classifierResult,classNumStr))if(classifierResult!=classNumStr):errorCount+=1print('\n the total numer of errors is %d'%errorCount)print('\n the total error rate is %f'%(errorCount/float(mTest)))#可以选择显示一下
#handwritingClassTest() """字符预测函数思路:1,输入特征值2、建立特征值数组3、归一化特征值4、输入预测文档如:4_0.txt5、返回预测值"""
def classifyChrct():hwLabels=[]trainingFileList=listdir('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('trainingDigits/%s'%fileNameStr)  #/代表子文件夹inputDocument=input('Please input the document with .txt that you want forecast\n')vectorUnderTest=img2vector('testDigits/%s'%(inputDocument))classifierResult=classify0(vectorUnderTest,trainingMat,hwLabels,3)print("the classifier come back with %d"%(classifierResult))#预测看结果
classifyChrct()

(机器学习实战)2.3手写识别系统(详细注释)相关推荐

  1. 机器学习(4)——手写识别系统实例

    基本概念 利用K-近邻算法对0-9的32*32的黑白数字图像进行归类. 基本思路步骤 收集数据:提供文本文件: 准备数据:编写图像格式转化为可供分类器使用的向量格式的函数代码: 分析数据:进行检查数据 ...

  2. 机器学习实战-手写识别系统

    在实现了K近邻算法后,书中给出了一个实例,今天来学习一下使用K近邻分类器的手写识别系统.书中原带的文件已经过处理转换为了文本格式,方便了许多. 先看一下原带文件 准备数据 #将图像转换为测试向量 de ...

  3. 【机器学习实战】k近邻算法实战——手写识别系统

    文章目录 手写识别系统 步骤: 准备数据:将图像转换为测试向量 测试算法:使用k-近邻算法识别手写数字 [完整代码] 手写识别系统 为了简单起见,这里构造的系统只能识别数字0到9,参见图2-6.需要识 ...

  4. 机器学习算法(一):k-近邻理论与python实现+经典应用(约会网站匹配、手写识别系统)

    一份算法学习笔记~ 亲爱的朋友,恭喜你点开神秘之门,哈哈哈哈!从这里开始,我们一起学习机器学习的经典算法吧. 这一次的主要内容是机器学习入门算法:k-近邻.理论相当好理解,下面我们正式开始啦! 算法简 ...

  5. 【机器学习】手写识别系统

    [机器学习]手写识别系统 过程 ==准备数据:将图像转换为测试向量== ==测试算法:使用k-近邻算法识别手写数字== ==完整代码== 过程 收集数据:提供文本文件 准备数据:编写函数classif ...

  6. java手写识别_手写识别系统

    目的 采用k-近邻算法实现手写识别系统.这里采用0和1组成数字0-9的形状,再用算法对这些形状进行识别,来分辨出形状属于0-9那个数字.并计算出k-近邻算法识别手写数字的错误率. 数据说明 数据来自& ...

  7. python实现手写识别系统

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.手写识别系统 二.主要步骤 1.准备数据:将图像转换为测试向量 2.测试算法:使用k-近邻算法识别手写数字 总结 ...

  8. Knn算法之手写识别系统

    knn值之手写识别系统 导入包 import numpy as np from os import listdir import operator 介绍 1.os模块 os.listdir() 方法用 ...

  9. 【Python】基于kNN算法的手写识别系统的实现与分类器测试

    基于kNN算法的手写识别系统 1.      数据准备 使用windows画图工具,手写0-9共10个数字,每个数字写20遍,共200个BMP文件. 方法如下,使用画图工具,打开网格线,调整像素为32 ...

  10. knn算法测试手写识别系统准确率

    手写识别系统,KNN算法实现手写识别系统的准确率 (准确率=测试分对的样本数/总的样本数) import numpy as np from itertools import chain from os ...

最新文章

  1. 使用ASP.NET 2.0提供的WebResource管理资源
  2. 关于CheckBoxList和RadioButtonList的几个问题
  3. 课程设计+计算机程序设计,高职计算机程序设计课翻转课堂初探
  4. 魅族android6.0,【魅族魅蓝5s评测】迷人Flyme 安卓6.0提升流畅度_手机评测-中关村在线...
  5. 离散实验偏序关系满足实验报告C语言,离散数学实验三:偏序关系中盖住关系的求取及格论中有补格的判定...
  6. 阿里云推出全新内存增强型实例re6,性能提升30%
  7. android中viewpager+fragment,ViewPager和Fragment一篇就够了
  8. OpenAI发布CLIP模型快一年了,盘点那些CLIP相关让人印象深刻的工作
  9. The Geometry has no Z values 解决办法
  10. unix 系统已经消亡了吗_世界上一半的语言正在消亡。 我们应该保存它们吗?
  11. LAMP兄弟连PHP高薪就业班2012召集令
  12. 2020年电工(技师)找答案及电工(技师)考试申请表
  13. html 表格输出excel,html中导出excel表格
  14. 计算机二级电子表格使用技巧36种,Excel表格中最经典的36个小技巧,全在这儿了...
  15. eclipse打开中文文件乱码问题
  16. Unity Shader - ARB_precision_hint_fastest / ARB_precision_hint_nicest 命令
  17. Android学习日记(yzy):显示application并调用
  18. RTK模块性能测试分析对比-GNSS实测- RTK板卡100赫兹延迟实测及分析
  19. QAxObject保存Excel表格
  20. 在python中gevent monkey_patch 出现Monkey-patching may lead to errors解决

热门文章

  1. S7 A7 K7 V7区别
  2. 2022年全球安全访问服务边缘行业分析报告
  3. 快手直播娱乐公会行业峰会即将启幕 四大举措助力公会强势崛起
  4. medium_socnet靶场
  5. java 周易解梦接口_周公解梦-免费API,收集所有免费的API
  6. 联通资费大幅下降意在强奸iPhone用户
  7. 计算机社团的ppt,社团管理系统.ppt
  8. Glyph 8722 missing from current font, matplotlib画图
  9. 【学习资料】红蓝紫队视角下的实战攻防演习
  10. Ubuntu Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答。