1. #!/usr/bin/python
  2. #coding:utf-8
  3. import numpy as np
  4. import operator
  5. import matplotlib
  6. import matplotlib.pyplot as plt
  7. import os
  8. '''''
  9. KNN算法
  10. 1. 计算已知类别数据集中的每个点依次执行与当前点的距离。
  11. 2. 按照距离递增排序。
  12. 3. 选取与当前点距离最小的k个点
  13. 4. 确定前k个点所在类别的出现频率
  14. 5. 返回前k个点出现频率最高的类别作为当前点的预测分类
  15. '''
  16. '''''
  17. inX为要分类的向量
  18. dataSet为训练样本
  19. labels为标签向量
  20. k为最近邻的个数
  21. '''
  22. def classify0(inX , dataSet , labels , k):
  23. dataSetSize = dataSet.shape[0]#dataSetSize为训练样本的个数
  24. diffMat = np.tile(inX , (dataSetSize , 1)) - dataSet#将inX扩展为dataSetSize行,1列
  25. sqDiffMat = diffMat**2
  26. sqDistances = sqDiffMat.sum(axis=1)
  27. distances = sqDistances**0.5
  28. sortedDistIndicies = distances.argsort()#返回的是元素从小到大排序后,该元素原来的索引值的序列
  29. classCount = {}
  30. for i in range(k):
  31. voteIlabel = labels[sortedDistIndicies[i]]#voteIlabel为类别
  32. classCount[voteIlabel] = classCount.get(voteIlabel,0)+1#如果之前这个voteIlabel是有的,那么就返回字典里这个voteIlabel里的值,如果没有就返回0
  33. sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)#key=operator.itemgetter(1)的意思是按照字典里的第一个排序,{A:1,B:2},要按照第1个(AB是第0个),即‘1’‘2’排序。reverse=True是降序排序
  34. print sortedClassCount
  35. return sortedClassCount[0][0]
  36. '''''
  37. 将图像转换为1*1024的向量
  38. '''
  39. def img2vector(filename):
  40. returnVect = np.zeros((1,1024))
  41. fr = open(filename)
  42. for i in range(32):
  43. line = fr.readline()
  44. for j in range(32):
  45. returnVect[0,i*32+j] = int(line[j] )
  46. return returnVect
  47. '''''
  48. 手写体识别系统测试
  49. '''
  50. def handwritingClassTest(trainFilePath,testFilePath):
  51. hwLabels = []
  52. trainingFileList = os.listdir(trainFilePath)
  53. m=len(trainingFileList)
  54. trainSet = np.zeros((m,1024))
  55. for i in range(m):
  56. filename = trainingFileList[i]
  57. classNum = filename.split('.')[0]
  58. classNum = int(classNum.split('_')[0])
  59. hwLabels.append(classNum)
  60. trainSet[i] = img2vector( os.path.join(trainFilePath,filename) )
  61. testFileList = os.listdir(testFilePath)
  62. errorCount = 0
  63. mTest = len(testFileList)
  64. for i in range(mTest):
  65. filename = trainingFileList[i]
  66. classNum = filename.split('.')[0]
  67. classNum = int(classNum.split('_')[0])
  68. vectorUnderTest = img2vector(os.path.join(trainFilePath, filename))
  69. classifyNum = classify0(vectorUnderTest,trainSet,hwLabels,10)
  70. print "the classifier came back with : %d , the real answer is : %d"% (classifyNum , classNum)
  71. if(classifyNum != classNum) : errorCount+=1
  72. print ("\nthe total number of error is : %d"%errorCount)
  73. print ("\nthe error rate is : %f"%(float(errorCount)/mTest))
  74. handwritingClassTest()

使用KNN算法手写体识别的更多相关文章

  1. KNN 算法-实战篇-如何识别手写数字

    公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...

  2. 机器学习实战(笔记)------------KNN算法

    1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例:         假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...

  3. KNN算法实现手写体区分

    KNN算法在python里面可以使用pip install指令安装,我在实现之前查看过安装的KNN算法,十分全面,包括了对于手写体数据集的处理.我这里只是实现了基础的识别方法,能力有限,没有数据处理方 ...

  4. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  5. kNN算法python实现和简单数字识别

    kNN算法 算法优缺点: 优点:精度高.对异常值不敏感.无输入数据假定 缺点:时间复杂度和空间复杂度都很高 适用数据范围:数值型和标称型 算法的思路: KNN算法(全称K最近邻算法),算法的思想很简单 ...

  6. Python 手写数字识别-knn算法应用

    在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...

  7. 机器学习--kNN算法识别手写字母

    本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...

  8. 运用kNN算法识别潜在续费商家

    背景与目标 Youzan 是一家SAAS公司,服务于数百万商家,帮助互联网时代的生意人私有化顾客资产.拓展互联网客群.提高经营效率.现在,该公司希望能够从商家的交易数据中,挖掘出有强烈续费倾向的商家, ...

  9. KNN算法识别手写数字

    需求: 利用一个手写数字“先验数据”集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ♦数据维度比较大,样本数比较多. ♦ 数据集包括数字0-9的手写体. ♦每个数字大约有20 ...

随机推荐

  1. 简单的TableView

    背景知识 每个表都是UITableView的实例,表中的每一行都是UITableViewCell的实例. TableView的种类 Grouped table Plain table without ...

  2. ChemDraw进行自动调整的步骤

    说到化学绘图软件那就不得不提ChemDraw,起非常的经典在国内外都得到了普遍应用,最新版是ChemDraw 15.1 Pro.在使用ChemDraw化学绘图工具绘制化学图形的时候,需要循序渐进一步一 ...

  3. android去权限反编译,签名,zipalign优化

    反编译:上工具ApkTool 下载自行搜索google  apktool github cd apktool目录 java -jar apktool_2.0.1.jar d xx.apk 生成xx目录 ...

  4. windows 中 Eclipse 打开当前文件所在文件夹

    默认情况下使用eclipse打开当前文件所在文件夹很麻烦,需要右键点击 Package Explorer 中的节点选择属性,然后复制路径,再打开资源管理器,然后再把路径粘贴进去.而MyEclipse一 ...

  5. pycharm 相关设置问题

    pycharm设置自动换行 file→settings→Editor→General→勾选 Use soft wraps in eitor → ok

  6. fastJson API

    FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   实际上其他的json处理工具都和 ...

  7. SpringMVC 之拦截器和异常处理

    1. 文件上传 Spring 使用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类: CommonsMultipartResolver ...

  8. Java 语言基础之语句

    程序的四种流程控制结构: 顺序结构 判断结构 : if 语句 选择结构 : switch 语句 循环结构 : while 语句, do...while 语句, for 语句 以下主要分析循环结构: w ...

  9. Virtualbox报错------>make sure the kernel module has been loaded successfully

    错误描述 很久没有用virtualbox了,今天打算在virtualbox上安装一个Ubuntu系统的时候,新建好Ubuntu后启动的时候,直接报错: Cannot access the kernel ...

  10. 我的Android进阶之旅------>解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug

    1.错误描述 今天测试人员提了一个bug,说使用我们的app出现了闪退的bug,后来通过debug断点调试,发现我们的app转换服务器发送过来的json数据后,都是为null.而之前已经提测快一个月的 ...