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根据出生年份简单计算生肖的方法
Mar 27 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
Python协程的用法和例子详解
Sep 09 Python
使用python为mysql实现restful接口
Jan 05 Python
Python微信公众号开发平台
Jan 25 Python
python如何使用unittest测试接口
Apr 04 Python
Python 2.7中文显示与处理方法
Jul 16 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
简单且有用的Python数据分析和机器学习代码
Jul 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
一贴学会PHP 新手入门教程
2009/08/03 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
点击文章内容处弹出页面代码
2009/10/01 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python getopt详解及简单实例
2016/12/30 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
python plotly绘制直方图实例详解
2019/07/22 Python
python实现各种插值法(数值分析)
2019/07/30 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
工程资料员岗位职责
2014/03/10 职场文书
家长给学校的建议书
2014/05/15 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
离婚被告代理词
2015/05/23 职场文书
解析原生JS getComputedStyle
2021/05/25 Javascript
MySQL系列之六 用户与授权
2021/07/02 MySQL
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python