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正则用法的简单实例
Jun 21 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
Python解析Excle文件中的数据方法
Oct 23 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
Tensorflow分批量读取数据教程
Feb 07 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 Python
python spilt()分隔字符串的实现示例
May 21 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
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Python 实现向word(docx)中输出
2020/02/13 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
幼师自荐信
2013/10/26 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
交通安全寄语大全
2014/04/08 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL