python使用KNN算法手写体识别


Posted in Python onFebruary 01, 2018

本文实例为大家分享了用KNN算法手写体识别的具体代码,供大家参考,具体内容如下

#!/usr/bin/python 
#coding:utf-8 
 
import numpy as np 
import operator 
import matplotlib 
import matplotlib.pyplot as plt 
import os 
 
''''' 
KNN算法 
1. 计算已知类别数据集中的每个点依次执行与当前点的距离。 
2. 按照距离递增排序。 
3. 选取与当前点距离最小的k个点 
4. 确定前k个点所在类别的出现频率 
5. 返回前k个点出现频率最高的类别作为当前点的预测分类 
''' 
 
''''' 
inX为要分类的向量 
dataSet为训练样本 
labels为标签向量 
k为最近邻的个数 
''' 
def classify0(inX , dataSet , labels , k): 
 dataSetSize = dataSet.shape[0]#dataSetSize为训练样本的个数 
 diffMat = np.tile(inX , (dataSetSize , 1)) - dataSet#将inX扩展为dataSetSize行,1列 
 sqDiffMat = diffMat**2 
 sqDistances = sqDiffMat.sum(axis=1) 
 distances = sqDistances**0.5 
 sortedDistIndicies = distances.argsort()#返回的是元素从小到大排序后,该元素原来的索引值的序列 
 classCount = {} 
 for i in range(k): 
  voteIlabel = labels[sortedDistIndicies[i]]#voteIlabel为类别 
  classCount[voteIlabel] = classCount.get(voteIlabel,0)+1#如果之前这个voteIlabel是有的,那么就返回字典里这个voteIlabel里的值,如果没有就返回0 
 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是降序排序 
 print sortedClassCount 
 return sortedClassCount[0][0] 
 
 
''''' 
将图像转换为1*1024的向量 
''' 
def img2vector(filename): 
 returnVect = np.zeros((1,1024)) 
 fr = open(filename) 
 for i in range(32): 
  line = fr.readline() 
  for j in range(32): 
   returnVect[0,i*32+j] = int(line[j] ) 
 return returnVect 
 
''''' 
手写体识别系统测试 
''' 
def handwritingClassTest(trainFilePath,testFilePath): 
 hwLabels = [] 
 trainingFileList = os.listdir(trainFilePath) 
 m=len(trainingFileList) 
 trainSet = np.zeros((m,1024)) 
 for i in range(m): 
  filename = trainingFileList[i] 
  classNum = filename.split('.')[0] 
  classNum = int(classNum.split('_')[0]) 
  hwLabels.append(classNum) 
  trainSet[i] = img2vector( os.path.join(trainFilePath,filename) ) 
 testFileList = os.listdir(testFilePath) 
 errorCount = 0 
 mTest = len(testFileList) 
 for i in range(mTest): 
  filename = trainingFileList[i] 
  classNum = filename.split('.')[0] 
  classNum = int(classNum.split('_')[0]) 
  vectorUnderTest = img2vector(os.path.join(trainFilePath, filename)) 
  classifyNum = classify0(vectorUnderTest,trainSet,hwLabels,10) 
  print "the classifier came back with : %d , the real answer is : %d"% (classifyNum , classNum) 
  if(classifyNum != classNum) : errorCount+=1 
 print ("\nthe total number of error is : %d"%errorCount) 
 print ("\nthe error rate is : %f"%(float(errorCount)/mTest)) 
handwritingClassTest()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的RSS阅读器实例
Jul 25 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
书单|人生苦短,你还不用python!
Dec 29 Python
对python使用http、https代理的实例讲解
May 07 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
Python自动化操作实现图例绘制
Jul 09 Python
numba提升python运行速度的实例方法
Jan 25 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
Python pyecharts绘制条形图详解
Apr 02 Python
python @property的用法及含义全面解析
Feb 01 #Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 #Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 #Python
Python命令行解析模块详解
Feb 01 #Python
python2.7到3.x迁移指南
Feb 01 #Python
Python Paramiko模块的使用实际案例
Feb 01 #Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 #Python
You might like
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
php数组去重的函数代码
2013/02/03 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
php实现生成验证码实例分享
2016/04/10 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
Python isinstance判断对象类型
2008/09/06 Python
Python创建字典的八种方式
2019/02/27 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
python对文件的操作方法汇总
2020/02/28 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
实习求职信
2013/12/01 职场文书
5s推行计划书
2014/05/06 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python