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. 【Raspberry Pi】定时运行python程序读温湿度传感器数据&发邮件

    1.定时执行脚本 http://tech.it168.com/a2011/0707/1214/000001214830_all.shtml /sbin/service crond start //启动 ...

  2. python入门(三):分支、循环、函数

    1.分支 if循环格式:if condition_1: statement_block_1elif condition_2: statement_block_2else: statement_bloc ...

  3. 解决WAS更新web.xml文件不生效的问题(web_merged.xml是罪魁祸首)

    问题原因分析 近日碰到更新web.xml文件到WAS服务器(WebSphere Application Server 8.5.5.3)后,不生效的问题. 网上找了一圈,基本都是说WAS缓存引起的. 手 ...

  4. oracle游标:查询并打印员工的姓名和薪水

    --查询并打印员工的姓名和薪水 --set serveroutput on /* 1.光标的属性 %found:假设取到了记录就是true否则是false: %notfound: */ declare ...

  5. iOS-常用宏定义

    下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...

  6. 【BZOJ3931】[CQOI2015]网络吞吐量 最大流

    [BZOJ3931][CQOI2015]网络吞吐量 Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为 ...

  7. 160627、你想知道的关于JavaScript作用域的一切

    JavaScript中有许多章节是关于scope的,但是对于初学者来说(甚至是一些有经验的JavaScript开发者),这些有关作用域的章节既不直接也不容易理解. 这篇文章的目的就是为了帮助那些想更深 ...

  8. iis express worker process已停止工作

    以管理员方式运行命令提示符工具,然后执行以下语句 netsh winsock reset 重启电脑

  9. Access导入Sql 2008 R2 错误 0xc020801c

    在选择数据源界面: 数据源:Microsoft Access 文件名:选择要导入的文件 用户名:admin 密码:(空的) 猛击”高级“按钮 切到”高级“选项卡,访问权限设为 ReadWrite,去掉 ...

  10. caffe使用(1)

    caffe使用 caffe是一个卓越的CNN框架 caffe源码是Cpp语言的,基于一些外部的库,包括BLAS(矩阵计算),CUDA(GPU驱动),gflags,glog,boost,protobuf ...